logo

Rozsahová slučka for v C++

V tejto téme budeme diskutovať o slučke for založenej na rozsahu v programovacom jazyku C++. Jazyk C++ zaviedol v C++ 11 a novších verziách nový koncept cyklu for založeného na rozsahu, ktorý je oveľa lepší ako bežný cyklus For. Slučka for založená na rozsahu nevyžaduje veľké kódovanie na implementáciu iterácie slučky for. Ide o sekvenčný iterátor, ktorý iteruje každý prvok kontajnera v určitom rozsahu (od začiatku do konca).

Rozsahová slučka for v C++

Syntax

 for (range_declaration : range_expression ) loop statement 
    rozsah_deklarácie:Používa sa na deklarovanie premennej, ktorej typ je rovnaký ako typy zhromaždených prvkov reprezentovaných výrazom rozsahu alebo odkazom na daný typ.rozsah_výraz:Definuje výraz, ktorý predstavuje vhodnú postupnosť prvkov.príkaz cyklu:Definuje telo cyklu for založeného na rozsahu, ktorý obsahuje jeden alebo viac príkazov, ktoré sa majú opakovane vykonať až do konca výrazu rozsahu.

Poznámka: Ak nepoznáme dátový typ prvkov kontajnera, môžeme použiť kľúčové slovo auto, ktoré automaticky identifikuje dátový typ výrazu rozsahu.

Program na tlač každého prvku poľa pomocou cyklu for založeného na rozsahu

Uvažujme o príklade tlače poľa int a double pomocou cyklu for založeného na rozsahu 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; } 

Výkon

 10 20 30 40 50 2.4 4.5 1.5 3.5 4.0 

Program na demonštráciu vektora v rozsahu na základe cyklu for

Napíšme jednoduchý program na implementáciu vektora v rozsahu na základe cyklu 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; } 

Výkon

 5 10 25 20 25 

Program na tlač polí pomocou slučky Range založenej na for v C++ s odkazom

Uvažujme o príklade tlače prvkov poľa pomocou rozsahu založeného na slučke 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; } 

Výkon

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

Vnorená slučka for založená na rozsahu

Keď je slučka definovaná v tele inej slučky, nazýva sa vnorená slučka for. Podobne, keď definujeme rozsah v slučke v inej slučke založenej na rozsahu, táto technika je známa ako vnorená slučka for založená na rozsahu.

Syntax:

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

Vo vyššie uvedenej syntaxi definujeme jednu slučku for založenú na rozsahu v inej slučke. Tu nazývame cyklus for založený na vnútornom a vonkajšom rozsahu v C++.

Program na tlač vnoreného cyklu for založeného na rozsahu v C++

Zvážte príklad, ktorý demonštruje vnorený rozsah založený na slučke for v programovacom jazyku C++.

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

Výkon

 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 

Aký je rozdiel medzi tradičnou slučkou for a slučkou for založenou na rozsahu?

A tradičná slučka for sa používa na opakované vykonávanie bloku kódu, kým nie je zadaná podmienka pravdivá. Tradičný cyklus for má tri parametre, inicializáciu premennej, špecifikujte podmienku a posledným je počítadlo, ktoré sa zvýši o jednotku, ak podmienka zostane pravdivá.

Syntax:

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

Slučka založená na rozsahu

Na druhej strane máme k dispozícii nový cyklus for založený na rozsahu v C++ 11 a novších verziách. Má dva parametre, deklaráciu rozsahu a výraz range_. Používa sa tiež na opakované vykonávanie bloku kódu v určitom rozsahu.

Syntax

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

Range_declaration sa používa na deklarovanie typu premennej súvisiacej s range_expression (kontajnerom). Rozsah_výraz: Je to ako kontajner, ktorý obsahuje rovnaké typy prvkov postupne. Príkaz loop_statement definuje príkaz, ktorý sa vykoná v rámci cyklu for.

Výhody slučky for založenej na rozsahu

  1. Je ľahko použiteľný a jeho syntax je tiež jednoduchá.
  2. Slučka for založená na rozsahu nevyžaduje výpočet počtu prvkov v kontajneroch
  3. Rozpoznáva počiatočné a koncové prvky kontajnerov.
  4. Ľahko upravíme veľkosť a prvky kontajnera.
  5. Nevytvára žiadnu kópiu prvkov.
  6. Je oveľa rýchlejší ako tradičný cyklus for.
  7. Zvyčajne používa kľúčové slovo auto na rozpoznanie typu údajov prvkov kontajnera.

Nevýhoda slučky for založenej na rozsahu

  1. Nemôže prejsť časťou zoznamu.
  2. Nedá sa použiť na prechádzanie v opačnom poradí
  3. Nedá sa použiť v ukazovateľoch.
  4. Neponúka indexovanie aktuálnych prvkov.