في هذا الموضوع، سنناقش حلقة for المستندة إلى النطاق في لغة البرمجة C++. قدمت لغة C++ مفهومًا جديدًا للحلقة for المستندة إلى النطاق في C++ 11 والإصدارات الأحدث، وهي أفضل بكثير من حلقة For العادية. لا تتطلب حلقة for المستندة إلى النطاق ترميزًا كبيرًا لتنفيذ تكرار الحلقة. إنه مكرر متسلسل يقوم بتكرار كل عنصر من عناصر الحاوية عبر نطاق (من البداية إلى النهاية).
بناء الجملة
for (range_declaration : range_expression ) loop statement
ملاحظة: إذا لم نكن نعرف نوع بيانات عناصر الحاوية، فيمكننا استخدام الكلمة الأساسية auto التي تحدد نوع بيانات range_expression تلقائيًا.
برنامج لطباعة كل عنصر من عناصر المصفوفة باستخدام النطاق المستند إلى الحلقة
لنفكر في مثال لطباعة المصفوفة int والمصفوفة المزدوجة باستخدام حلقة for المستندة إلى النطاق في لغة C++.
Program.cpp
#include using namespace std; int main () { int arr1 [5] = { 10, 20, 30, 40, 50}; double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 }; // use range based for loop for ( const auto &var : arr1 ) { cout << var << ' ' ; } // use auto keyword to automatically specify the data type of darr container. for ( const auto &var : darr ) { cout << var << ' ' ; } return 0; }
انتاج |
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
برنامج لتوضيح المتجه في النطاق بناءً على الحلقة
دعونا نكتب برنامجًا بسيطًا لتنفيذ المتجه في النطاق بناءً على الحلقة.
سلسلة فرعية من سلسلة جافا
Program2.cpp
#include #include using namespace std; int main() { int x; // declare integer variable // declare vector variable vector vect = {5, 10 , 25, 20, 25}; // display vector elements for ( int x : vect) { cout << x << ' '; } return 0; }
انتاج |
5 10 25 20 25
برنامج لطباعة المصفوفات باستخدام Range Based for Loop في C++ مع المرجع
لنفكر في مثال لطباعة عناصر المصفوفة باستخدام النطاق المستند إلى حلقة for في لغة C++.
Program3.cpp
#include #include #include using namespace std; int main(){ array data = {1, 3, -2, 4, 6, 7, 9}; cout << ' Before updating the elements: ' << endl; for (int x : data){ cout << x << ' '; } // pass the references for (int &itemRef : data){ itemRef *= 3; } cout << endl << ' After modification of the elements: ' << endl; for (int x : data){ cout << x << ' '; } cout << endl; return 0; }
انتاج |
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
حلقة for متداخلة تعتمد على النطاق
عندما يتم تعريف حلقة داخل جسم حلقة أخرى، تسمى الحلقة حلقة for متداخلة. وبالمثل، عندما نحدد نطاقًا في حلقة داخل حلقة أخرى قائمة على النطاق، تُعرف هذه التقنية باسم حلقة for المتداخلة القائمة على النطاق.
بناء الجملة:
بيثون فرز الصفوف
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
في بناء الجملة أعلاه، قمنا بتعريف حلقة for واحدة قائمة على النطاق داخل حلقة أخرى. نحن هنا نسمي حلقة for المستندة إلى النطاق الداخلي والخارجي في لغة C++.
برنامج لطباعة حلقة for المتداخلة المستندة إلى النطاق في C++
فكر في مثال لتوضيح النطاق المتداخل القائم على حلقة for في لغة البرمجة C++.
Range.cpp
#include using namespace std; int main () { int arr1[4] = { 0, 1, 2, 3 }; int arr2[5] = { 1, 2, 3, 4, 5 }; // use nested range based for loop for ( int x : arr1 ) { // declare nested loop for ( int y : arr2 ) { cout << ' x = ' << x << ' and j = ' << y << endl; } } return 0; }
انتاج |
x = 0 and j = 1 x = 0 and j = 2 x = 0 and j = 3 x = 0 and j = 4 x = 0 and j = 5 x = 1 and j = 1 x = 1 and j = 2 x = 1 and j = 3 x = 1 and j = 4 x = 1 and j = 5 x = 2 and j = 1 x = 2 and j = 2 x = 2 and j = 3 x = 2 and j = 4 x = 2 and j = 5 x = 3 and j = 1 x = 3 and j = 2 x = 3 and j = 3 x = 3 and j = 4 x = 3 and j = 5
ما هو الفرق بين الحلقة التقليدية والحلقة المستندة إلى النطاق؟
أ التقليدية للحلقة يتم استخدامه لتنفيذ كتلة التعليمات البرمجية بشكل متكرر حتى يصبح الشرط المحدد صحيحًا. تحتوي حلقة for التقليدية على ثلاث معلمات، تهيئة المتغير، وتحديد الشرط، والأخير هو العداد الذي يتم زيادته بمقدار واحد إذا ظل الشرط صحيحًا.
بناء الجملة:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
حلقة تعتمد على النطاق
من ناحية أخرى، لدينا حلقة for جديدة تعتمد على النطاق ومتوفرة في الإصدار C++ 11 والإصدارات الأحدث. يحتوي على معلمتين، إعلان النطاق، وتعبير range_. يتم استخدامه أيضًا لتنفيذ كتلة التعليمات البرمجية بشكل متكرر عبر نطاق ما.
بناء الجملة
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
يتم استخدام range_declaration للإعلان عن نوع المتغير المرتبط بتعبير range_expression (الحاوية). تعبير النطاق: يشبه الحاوية التي تحتوي على نفس أنواع العناصر بطريقة تسلسلية. تحدد حلقة_بيان العبارة التي يتم تنفيذها داخل حلقة for.
مزايا حلقة for المستندة إلى النطاق
- إنه سهل الاستخدام، كما أن تركيبه بسيط أيضًا.
- لا تتطلب حلقة for المستندة إلى النطاق حساب عدد العناصر الموجودة في الحاوية
- يتعرف على عناصر البداية والنهاية للحاويات.
- يمكننا بسهولة تعديل حجم وعناصر الحاوية.
- لا يقوم بإنشاء أي نسخة من العناصر.
- إنها أسرع بكثير من حلقة for التقليدية.
- عادةً ما يستخدم الكلمة الأساسية auto للتعرف على نوع بيانات عناصر الحاوية.
مساوئ النطاق القائم على الحلقة
- لا يمكن اجتياز جزء من القائمة.
- ولا يمكن استخدامه للتنقل بترتيب عكسي
- لا يمكن استخدامه في المؤشرات.
- لا يعرض فهرسة العناصر الحالية.