În acest subiect, vom discuta bucla for bazată pe interval în limbajul de programare C++. Limbajul C++ a introdus un nou concept al buclei for bazate pe intervale în C++11 și versiunile ulterioare, care este mult mai bun decât bucla For obișnuită. O buclă for bazată pe intervale nu necesită o codificare mare pentru a fi implementată pentru iterația buclei. Este un iterator secvenţial care a iterat fiecare element al containerului pe un interval (de la început până la sfârșit).
Sintaxă
for (range_declaration : range_expression ) loop statement
Notă: Dacă nu cunoaștem tipul de date al elementelor containerului, putem folosi cuvântul cheie auto care identifică automat tipul de date al expresiei_range.
Program pentru a imprima fiecare element al matricei folosind intervalul bazat pe bucla for
Să luăm în considerare un exemplu de tipărire a matricei int și double folosind bucla for bazată pe interval în 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; }
Ieșire
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Program pentru a demonstra vectorul în interval bazat pe bucla for
Să scriem un program simplu pentru a implementa vectorul în interval bazat pe bucla for.
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; }
Ieșire
5 10 25 20 25
Program pentru a imprima matricele folosind intervalul bazat pe bucla for în C++ cu referință
Să luăm în considerare un exemplu de tipărire a elementelor matricei folosind intervalul bazat pe bucla for în 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; }
Ieșire
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
Bucla for bazată pe interval imbricat
Când o buclă este definită în corpul altei bucle, bucla se numește buclă imbricată for. În mod similar, când definim un interval într-o buclă în interiorul unei alte bucle bazate pe interval, tehnica este cunoscută ca o buclă for imbricată bazată pe interval.
Sintaxă:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
În sintaxa de mai sus, definim o buclă for bazată pe interval în interiorul unei alte bucle. Aici numim bucla for bazată pe intervale interioare și exterioare în C++.
Program pentru a tipări bucla for bazată pe interval imbricat în C++
Luați în considerare un exemplu pentru a demonstra intervalul imbricat bazat pe bucla for în limbajul de programare C++.
Interval.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; }
Ieșire
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
Care este diferența dintre bucla for tradițională și bucla for bazată pe interval?
A tradițional pentru buclă este folosit pentru a executa în mod repetat blocul de cod până când condiția specificată este adevărată. O buclă for tradițională are trei parametri, inițializarea variabilei, specificați condiția, iar ultimul este contorul care este incrementat cu unu dacă condiția rămâne adevărată.
Sintaxă:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Buclă bazată pe interval
Pe de altă parte, avem o nouă buclă bazată pe gamă disponibilă în versiunea C++ 11 și ulterioară. Are doi parametri, declarația intervalului și expresia range_. De asemenea, este folosit pentru a executa în mod repetat blocul de cod într-un interval.
Sintaxă
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
Range_declaration este folosită pentru a declara tipul de variabilă legată de range_expression (container). Range_expression: este exact ca un container care deține aceleași tipuri de elemente într-o manieră secvențială. Loop_statement definește instrucțiunea care este executată în interiorul buclei for.
Avantajele buclei for bazate pe interval
- Este ușor de utilizat, iar sintaxa sa este, de asemenea, simplă.
- O buclă bazată pe intervale nu necesită calculul numărului de elemente dintr-un container
- Recunoaște elementele de început și de sfârșit ale containerelor.
- Putem modifica cu ușurință dimensiunea și elementele containerului.
- Nu creează nicio copie a elementelor.
- Este mult mai rapid decât bucla for tradițională.
- De obicei, folosește cuvântul cheie auto pentru a recunoaște tipul de date al elementelor containerului.
Dezavantajul buclei for bazate pe interval
- Nu poate traversa o parte a unei liste.
- Nu poate fi folosit pentru a traversa în ordine inversă
- Nu poate fi folosit în indicatoare.
- Nu oferă indexarea elementelor curente.