Šajā tēmā mēs apspriedīsim diapazonā balstīto cilpu C++ programmēšanas valodā. C++ valoda C++11 un jaunākās versijās ieviesa jaunu uz diapazonu balstītas cilpas koncepciju, kas ir daudz labāka nekā parastā For cilpa. Diapazona cilpai nav nepieciešama liela kodēšana, lai ieviestu cilpas iterāciju. Tas ir secīgs iterators, kas atkārto katru konteinera elementu diapazonā (no sākuma līdz beigām).
Sintakse
for (range_declaration : range_expression ) loop statement
Piezīme. Ja mēs nezinām konteinera elementu datu tipu, varam izmantot automātisko atslēgvārdu, kas automātiski identificē diapazona_izteiksmes datu tipu.
Programma katra masīva elementa drukāšanai, izmantojot diapazonu, kura pamatā ir cilpa
Apskatīsim piemēru int un dubultā masīva drukāšanai, izmantojot diapazonu balstītu for cilpu programmā C++.
programma.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; }
Izvade
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Programma vektora demonstrēšanai diapazonā, kura pamatā ir cilpa
Uzrakstīsim vienkāršu programmu vektora ieviešanai diapazonā, kura pamatā ir cilpa.
Programma2.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; }
Izvade
5 10 25 20 25
Programma masīvu drukāšanai, izmantojot diapazonu, pamatojoties uz cilpu C++ ar atsauci
Apskatīsim piemēru, kā drukāt masīva elementus, izmantojot diapazonu, kas balstīts uz cilpu programmā C++.
Programma3.cpp
c++ int uz virkni
#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; }
Izvade
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
Ligzdota diapazona cilpai
Ja cilpa ir definēta citas cilpas pamattekstā, cilpu sauc par ligzdotu cilpu. Līdzīgi, kad mēs definējam diapazonu cilpā citā uz diapazonu balstītā cilpā, paņēmiens ir pazīstams kā ligzdots diapazons, kas balstīts uz cilpu.
pilna papildinātāja patiesības tabula
Sintakse:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
Iepriekš minētajā sintaksē mēs definējam vienu diapazonu balstītu cilpu citai cilpai. Šeit mēs saucam par iekšējo un ārējo diapazonu balstītu cilpu C++.
Programma ligzdotā diapazona cilpas drukāšanai programmā C++
Apsveriet piemēru, lai parādītu ligzdoto diapazonu, kura pamatā ir cilpa C++ programmēšanas valodā.
Diapazons.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; }
Izvade
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
Kāda ir atšķirība starp tradicionālo cilpu un diapazonu balstītu cilpu?
A tradicionālā cilpai tiek izmantots, lai atkārtoti izpildītu koda bloku, līdz norādītais nosacījums ir patiess. Tradicionālajai cilpai ir trīs parametri, mainīgā inicializācija, norādiet nosacījumu, un pēdējais ir skaitītājs, kas tiek palielināts par vienu, ja nosacījums paliek patiess.
Sintakse:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Uz diapazonu balstīta cilpa
No otras puses, C++ 11 un jaunākā versijā ir pieejama jauna diapazona cilpa. Tam ir divi parametri, diapazona deklarācija un diapazona_ izteiksme. To izmanto arī, lai atkārtoti izpildītu koda bloku diapazonā.
Sintakse
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
Diapazona_deklarācija tiek izmantota, lai deklarētu mainīgā veidu, kas saistīts ar diapazona_izteiksmi (konteineru). Diapazona_izteiksme: tas ir gluži kā konteiners, kurā secīgi ir viena veida elementi. Loop_statement definē paziņojumu, kas tiek izpildīts cilpas iekšpusē.
Diapazona cilpas priekšrocības
- To ir viegli lietot, un arī tā sintakse ir vienkārša.
- Diapazonā balstītai cilpai nav nepieciešams aprēķināt elementu skaitu konteineros
- Tas atpazīst konteineru sākuma un beigu elementus.
- Mēs varam viegli mainīt konteinera izmēru un elementus.
- Tas nerada nevienu elementu kopiju.
- Tas ir daudz ātrāks nekā tradicionālā for loop.
- Tas parasti izmanto automātisko atslēgvārdu, lai atpazītu konteinera elementu datu tipu.
Uz diapazonu balstītas cilpas trūkums
- Tas nevar šķērsot kādu saraksta daļu.
- To nevar izmantot, lai pārvietotos apgrieztā secībā
- To nevar izmantot rādītājos.
- Tas nepiedāvā pašreizējo elementu indeksēšanu.