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).
Sintaksa
for (range_declaration : range_expression ) loop statement
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
- Je enostaven za uporabo, prav tako je preprosta sintaksa.
- Zanka for, ki temelji na območju, ne zahteva izračuna števila elementov v vsebnikih
- Prepoznava začetne in končne elemente vsebnikov.
- Velikost in elemente posode enostavno spreminjamo.
- Ne ustvari nobene kopije elementov.
- Je veliko hitrejša od tradicionalne zanke for.
- Običajno uporablja ključno besedo auto za prepoznavanje vrste podatkov elementov vsebnika.
Pomanjkljivost zanke for na podlagi obsega
- Ne more prečkati dela seznama.
- Ni ga mogoče uporabiti za premikanje v obratnem vrstnem redu
- Ni ga mogoče uporabiti v kazalcih.
- Ne ponuja indeksiranja trenutnih elementov.