logo

Tartomány alapú a ciklushoz C++ nyelven

Ebben a témában a C++ programozási nyelv tartomány alapú for ciklusát tárgyaljuk. A C++ nyelv a tartomány alapú for ciklus új koncepcióját vezette be a C++11 és újabb verzióiban, ami sokkal jobb, mint a hagyományos For ciklus. A tartomány alapú for ciklus nem igényel nagy kódolást a ciklus iterációjához. Ez egy szekvenciális iterátor, amely a tároló minden elemét egy tartományon keresztül iterálja (az elejétől a végéig).

pandák loc
Tartomány alapú a ciklushoz C++ nyelven

Szintaxis

 for (range_declaration : range_expression ) loop statement 
    range_declaration:Egy olyan változó deklarálására szolgál, amelynek típusa megegyezik a range_expression vagy az arra a típusra való hivatkozás által képviselt összegyűjtött elemek típusaival.range_expression:Meghatároz egy kifejezést, amely a megfelelő elemsorozatot reprezentálja.ciklus utasítás:Meghatározza a tartomány alapú for ciklus törzsét, amely egy vagy több utasítást tartalmaz, amelyeket a tartománykifejezés végéig ismételten végre kell hajtani.

Megjegyzés: Ha nem ismerjük a tárolóelemek adattípusát, használhatjuk az auto kulcsszót, amely automatikusan azonosítja a range_expression adattípusát.

Program a tömb minden elemének kinyomtatására a ciklus alapú tartomány használatával

Nézzünk egy példát az int és a dupla tömb kinyomtatására a tartomány alapú for ciklus használatával a C++ nyelven.

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

Kimenet

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Program, amely bemutatja a vektort a tartományon belül a hurok alapján

Írjunk egy egyszerű programot a vektor tartomány alapú for ciklus alapú megvalósítására.

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

Kimenet

 5 10 25 20 25 

Program a tömbök kinyomtatására a Range alapú for ciklus használatával C++ nyelven hivatkozással

Nézzünk egy példát a tömbelemek kinyomtatására a tartomány alapú for ciklus használatával a C++ nyelven.

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

Kimenet

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

Beágyazott tartomány alapú hurokhoz

Ha egy hurkot egy másik hurok törzsében definiálunk, a ciklust beágyazott ciklusnak nevezzük. Hasonlóképpen, amikor egy hurokban definiálunk egy tartományt egy másik tartományalapú hurkon belül, a technikát beágyazott tartomány-alapú for ciklusnak nevezzük.

Szintaxis:

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

A fenti szintaxisban egy tartomány alapú ciklust definiálunk egy másik cikluson belül. Itt belső és külső tartomány alapúnak nevezzük a ciklust a C++ nyelven.

Program a beágyazott tartomány alapú for ciklus kinyomtatására C++ nyelven

Tekintsen egy példát a beágyazott tartomány bemutatására a cikluson alapuló C++ programozási nyelvben.

Tartomány.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; } 

Kimenet

 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 

Mi a különbség a hagyományos for loop és a range-based for loop között?

A hagyományos for loop a kódblokk ismételt végrehajtására szolgál, amíg a megadott feltétel igaz. A hagyományos for ciklusnak három paramétere van, a változó inicializálása, a feltétel megadása, az utolsó pedig a számláló, amely eggyel növekszik, ha a feltétel igaz marad.

Szintaxis:

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

Tartomány alapú hurok

Másrészt a C++ 11-es és újabb verzióiban elérhető egy új tartomány-alapú for loop. Két paramétere van, a tartomány deklarációja és a range_ kifejezés. A kódblokk egy tartományon belüli ismételt végrehajtására is szolgál.

Szintaxis

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

A range_declaration a tartomány_kifejezéshez (tároló) kapcsolódó változó típusának deklarálására szolgál. A range_expression: Olyan, mint egy tároló, amely azonos típusú elemeket tartalmaz egymás után. A loop_statement határozza meg a cikluson belül végrehajtott utasítást.

A tartomány alapú for hurok előnyei

  1. Könnyen használható, és a szintaxisa is egyszerű.
  2. A tartomány alapú for ciklus nem igényli a tárolókban lévő elemek számának kiszámítását
  3. Felismeri a konténerek kezdő és záró elemeit.
  4. Könnyedén módosíthatjuk a konténer méretét és elemeit.
  5. Nem hoz létre másolatot az elemekről.
  6. Sokkal gyorsabb, mint a hagyományos for ciklus.
  7. Általában az auto kulcsszót használja a tárolóelemek adattípusának felismerésére.

A tartomány alapú for hurok hátránya

  1. Nem képes bejárni a lista egy részét.
  2. Nem használható fordított sorrendben történő mozgásra
  3. Mutatókban nem használható.
  4. Nem kínálja fel az aktuális elemek indexelését.