logo

Bucla for bazată pe intervale în C++

Î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).

Bucla for bazată pe intervale în C++

Sintaxă

 for (range_declaration : range_expression ) loop statement 
    range_declaration:Este folosit pentru a declara o variabilă al cărei tip este același cu tipurile elementelor colectate reprezentate de range_expression sau referința la acel tip.range_expression:Definește o expresie care reprezintă succesiunea adecvată de elemente.declarație buclă:Acesta definește corpul buclei for bazate pe interval care conține una sau mai multe instrucțiuni care urmează să fie executate în mod repetat până la sfârșitul expresiei interval.

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

  1. Este ușor de utilizat, iar sintaxa sa este, de asemenea, simplă.
  2. O buclă bazată pe intervale nu necesită calculul numărului de elemente dintr-un container
  3. Recunoaște elementele de început și de sfârșit ale containerelor.
  4. Putem modifica cu ușurință dimensiunea și elementele containerului.
  5. Nu creează nicio copie a elementelor.
  6. Este mult mai rapid decât bucla for tradițională.
  7. De obicei, folosește cuvântul cheie auto pentru a recunoaște tipul de date al elementelor containerului.

Dezavantajul buclei for bazate pe interval

  1. Nu poate traversa o parte a unei liste.
  2. Nu poate fi folosit pentru a traversa în ordine inversă
  3. Nu poate fi folosit în indicatoare.
  4. Nu oferă indexarea elementelor curente.