logo

Zanka for na podlagi obsega v C++

V tej temi bomo razpravljali o zanki for na podlagi obsega v programskem jeziku C++. Jezik C++ je uvedel nov koncept zanke for, ki temelji na območju, v C++11 in novejših različicah, ki je veliko boljši od običajne zanke For. Zanka for, ki temelji na obsegu, ne zahteva velikega kodiranja za implementacijo ponovitve zanke for. Je zaporedni iterator, ki ponavlja vsak element vsebnika v razponu (od začetka do konca).

Zanka for na podlagi obsega v C++

Sintaksa

 for (range_declaration : range_expression ) loop statement 
    deklaracija obsega:Uporablja se za deklaracijo spremenljivke, katere tip je enak tipom zbranih elementov, ki jih predstavlja range_expression ali sklic na ta tip.obseg_izraza:Definira izraz, ki predstavlja ustrezno zaporedje elementov.izjava zanke:Definira telo zanke for, ki temelji na obsegu in vsebuje enega ali več stavkov, ki jih je treba večkrat izvesti do konca izraza obsega.

Opomba: Če ne poznamo podatkovnega tipa elementov vsebnika, lahko uporabimo ključno besedo auto, ki samodejno identificira podatkovni tip range_expression.

Program za tiskanje vsakega elementa matrike z uporabo obsega, ki temelji na zanki for

Oglejmo si primer tiskanja int in dvojne matrike z uporabo zanke for, ki temelji na območju, v 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; } 

Izhod

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Program za predstavitev vektorja v območju na podlagi zanke for

Napišimo preprost program za implementacijo vektorja v območju, ki temelji na zanki for.

chmod 755

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; } 

Izhod

 5 10 25 20 25 

Program za tiskanje nizov z uporabo zanke for na podlagi obsega v C++ z referenco

Oglejmo si primer za tiskanje elementov matrike z uporabo obsega, ki temelji na zanki for v 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; } 

Izhod

 Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27 

Ugnezdena zanka for na podlagi obsega

Ko je zanka definirana znotraj telesa druge zanke, se zanka imenuje ugnezdena zanka for. Podobno, ko definiramo obseg v zanki znotraj druge zanke, ki temelji na obsegu, je tehnika znana kot ugnezdena zanka for, ki temelji na obsegu.

Sintaksa:

top 10 hentai
 for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed } 

V zgornji sintaksi definiramo eno zanko for, ki temelji na območju, znotraj druge zanke. Tukaj v C++ imenujemo notranjo in zunanjo zanko for, ki temelji na obsegu.

Program za tiskanje ugnezdene zanke for, ki temelji na območju, v C++

Razmislite o primeru za predstavitev ugnezdenega obsega, ki temelji na zanki for v programskem jeziku 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; } 

Izhod

 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 

Kakšna je razlika med tradicionalno zanko for in zanko for na podlagi obsega?

A tradicionalna for zanka se uporablja za ponavljajoče se izvajanje bloka kode, dokler podani pogoj ni resničen. Tradicionalna zanka for ima tri parametre, inicializacijo spremenljivke, podajanje pogoja in zadnji je števec, ki se poveča za ena, če pogoj ostane resničen.

Sintaksa:

 for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; } 

Zanka na podlagi obsega

Po drugi strani pa imamo v C++ 11 in novejši različici na voljo novo zanko for, ki temelji na območju. Ima dva parametra, deklaracijo obsega in izraz range_. Uporablja se tudi za ponavljajoče se izvajanje bloka kode v razponu.

Sintaksa

 for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; } 

Rang_declaration se uporablja za deklaracijo vrste spremenljivke, povezane z range_expression (vsebnik). Rang_expression: je kot vsebnik, ki vsebuje iste vrste elementov na zaporedni način. Stavek_zanke definira stavek, ki se izvaja znotraj zanke for.

Prednosti zanke for na podlagi obsega

  1. Je enostaven za uporabo, prav tako je preprosta sintaksa.
  2. Zanka for, ki temelji na območju, ne zahteva izračuna števila elementov v vsebnikih
  3. Prepoznava začetne in končne elemente vsebnikov.
  4. Velikost in elemente posode enostavno spreminjamo.
  5. Ne ustvari nobene kopije elementov.
  6. Je veliko hitrejša od tradicionalne zanke for.
  7. Običajno uporablja ključno besedo auto za prepoznavanje vrste podatkov elementov vsebnika.

Pomanjkljivost zanke for na podlagi obsega

  1. Ne more prečkati dela seznama.
  2. Ni ga mogoče uporabiti za premikanje v obratnem vrstnem redu
  3. Ni ga mogoče uporabiti v kazalcih.
  4. Ne ponuja indeksiranja trenutnih elementov.