logo

Diapazonu pagrįstas ciklas C++

Šioje temoje aptarsime diapazonu pagrįstą for kilpą C++ programavimo kalba. C++ kalba C++11 ir vėlesnėse versijose pristatė naują diapazonu pagrįsto ciklo koncepciją, kuri yra daug geresnė nei įprasta For ciklas. Diapazonas pagrįstai ciklas nereikalauja didelio kodavimo, kad būtų galima įdiegti ciklo iteraciją. Tai nuoseklus iteratorius, kartojantis kiekvieną konteinerio elementą tam tikru diapazonu (nuo pradžios iki pabaigos).

Diapazonas pagrįstas C++ ciklas

Sintaksė

 for (range_declaration : range_expression ) loop statement 
    range_declaration:Jis naudojamas deklaruoti kintamąjį, kurio tipas yra toks pat kaip surinktų elementų tipai, atstovaujami diapazono_išraiška arba nuoroda į tą tipą.range_expression:Jis apibrėžia išraišką, vaizduojančią tinkamą elementų seką.ciklo teiginys:Jis apibrėžia diapazonu pagrįsto ciklo turinį, kuriame yra vienas ar daugiau teiginių, kurie turi būti pakartotinai vykdomi iki diapazono išraiškos pabaigos.

Pastaba: jei nežinome konteinerio elementų duomenų tipo, galime naudoti automatinį raktinį žodį, kuris automatiškai identifikuoja diapazono_reiškimo duomenų tipą.

Programa, skirta spausdinti kiekvieną masyvo elementą naudojant diapazoną, pagrįstą ciklu

Panagrinėkime pavyzdį, kaip spausdinti int ir dvigubą masyvą naudojant diapazoną pagrįstą for kilpą C++.

programa.cpp

pavyzdys Java
 #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; } 

Išvestis

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Programa, skirta parodyti vektorių diapazone, pagrįsta ciklu

Parašykime paprastą programą vektoriui realizuoti diapazone, pagrįstu ciklu.

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

Išvestis

java listnode
 5 10 25 20 25 

Programa spausdinti masyvus naudojant diapazoną, pagrįstą C++ ciklu su nuoroda

Apsvarstykite pavyzdį, kaip spausdinti masyvo elementus naudojant diapazoną, pagrįstą ciklu 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; } 

Išvestis

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

Įdėtas diapazonas pagrįstas ciklas

Kai kilpa apibrėžiama kitos kilpos korpuse, ji vadinama įdėtuoju ciklu. Panašiai, kai apibrėžiame diapazoną cikle kitoje diapazonu pagrįstoje kilpoje, ši technika žinoma kaip įdėtas diapazonas pagrįstas ciklas.

ketvirčius per metus

Sintaksė:

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

Aukščiau pateiktoje sintaksėje apibrėžiame vieną diapazoną pagrįstą kilpą kito ciklo viduje. Čia mes vadiname vidiniu ir išoriniu diapazonu pagrįstas ciklais C++.

Programa, skirta spausdinti įdėtąjį diapazoną, pagrįstą ciklu C++

Apsvarstykite pavyzdį, kaip parodyti įdėtą diapazoną, pagrįstą ciklu C++ programavimo kalba.

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

Išvestis

 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 

Kuo skiriasi tradicinis ciklas ir diapazonu pagrįstas ciklas?

A tradicinis ciklas naudojamas pakartotinai vykdyti kodo bloką, kol nurodyta sąlyga yra teisinga. Tradicinis ciklas turi tris parametrus, kintamojo inicijavimą, nurodykite sąlygą, o paskutinis yra skaitiklis, kuris padidinamas vienu, jei sąlyga išlieka teisinga.

Sintaksė:

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

Diapazonas pagrįsta kilpa

kabinos algoritmas

Kita vertus, C++ 11 ir naujesnėse versijose turime naują diapazonu pagrįstą ciklu. Jis turi du parametrus: diapazono deklaraciją ir diapazono_ išraišką. Jis taip pat naudojamas pakartotinai vykdyti kodo bloką per diapazoną.

Sintaksė

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

Diapazono_deklaracija naudojama deklaruoti kintamojo tipą, susijusį su diapazono_reiškiniu (konteineriu). Diapazono_išraiška: tai kaip konteineris, kuriame nuosekliai laikomi to paties tipo elementai. Loop_statement apibrėžia teiginį, kuris vykdomas ciklo viduje.

Diapazonu pagrįstos kilpos privalumai

  1. Juo lengva naudotis, o jo sintaksė taip pat paprasta.
  2. Diapazonu pagrįsto ciklo elementų skaičiaus konteineryje skaičiuoti nereikia
  3. Jis atpažįsta konteinerių pradžios ir pabaigos elementus.
  4. Mes galime lengvai pakeisti konteinerio dydį ir elementus.
  5. Tai nesukuria jokių elementų kopijų.
  6. Tai daug greitesnė nei tradicinė for loop.
  7. Paprastai jis naudoja automatinį raktinį žodį, kad atpažintų konteinerio elementų duomenų tipą.

Diapazono pagrįsto ciklo trūkumas

  1. Jis negali pereiti sąrašo dalies.
  2. Jis negali būti naudojamas važiuoti atvirkštine tvarka
  3. Jis negali būti naudojamas rodyklėse.
  4. Ji nesiūlo indeksuoti esamų elementų.