V tej vadnici bomo s pomočjo primerov spoznali C ++ za zanke in njegove najboljše prakse.
C ++ 11 je predstavil obsežno for
zanko. Ta for
zanka se posebej uporablja za zbirke, kot so nizi in vektorji .
Na primer
// initialize an int array int num(3) = (1, 2, 3); // use of ranged for loop for (int var : num) ( // code )
Tu for
zanka z obsegom ponovi matriko številka od začetka do konca. int
Spremenljivka var shrani vrednost matrike elementa v vsaki ponovitvi.
Njegova sintaksa je,
for (rangeDeclaration : rangeExpression) ( // code )
V zgornjem primeru je
- rangeDeclaration -
int var
- rangeExpression - štev

Primer 1: Obseg za zanko z uporabo polja
#include using namespace std; int main() ( // initialize array int numArray() = (1, 2, 3, 4, 5); // use of ranged for loop to print array elements for (int n : numArray) ( cout << n << " "; ) return 0; )
Izhod
1 2 3 4 5
V tem primeru smo deklarirali in inicializirali int
polje z imenom numArray. Tu smo uporabili for
zanko z obsegom za izpis elementov numArray.
- prva ponovitev - n zavzame vrednost prvega člana polja, ki je
1
- druga ponovitev - n zavzame vrednost
2
in se nato natisne itd.
Opomba: zanka Range for samodejno ponovi matriko od začetka do konca. Števila ponovitev v zanki ni treba določiti.
Primer 2: Razpon C ++ za zanko z vektorjem
#include #include using namespace std; int main() ( // declare and initialize vector vector num_vector = (1, 2, 3, 4, 5); // print vector elements for (int n : num_vector) ( cout << n << " "; ) return 0; )
Izhod
1 2 3 4 5
Primer 3: Prijavite zbirko znotraj zanke
#include using namespace std; int main() ( // define the collection in the loop itself for (int n : (1, 2, 3, 4, 5)) ( cout << n << " "; ) return 0; )
Izhod
1 2 3 4 5
Tu smo razglasili zbirko znotraj same zanke, tj
rangeExpression = (1, 2, 3, 4, 5)
To je tudi veljaven način uporabe obsežne for
zanke in deluje na enak način kot kadar uporabimo dejansko matriko ali vektor.
C ++ uvrščen med najboljše prakse zanke
V zgornjih primerih smo v for
zanki razglasili spremenljivko za shranjevanje vsakega elementa zbirke v vsaki ponovitvi.
int num(3) = (1, 2, 3); // copy elements of num to var for (int var : num) ( // code )
Vendar je bolje, da razpon, ki temelji na zanki, zapišete takole:
// access memory location of elements of num for (int &var : num) ( // code )
Upoštevajte uporabo &
pred var. Tukaj,
int var : num
- Kopira vsak element num v spremenljivko var v vsaki ponovitvi. To ni dobro za računalniški pomnilnik.int &var : num
- Ne kopira vsakega elementa num v var. Namesto tega dostopa do elementov num neposredno iz samega num. To je bolj učinkovito.
Opomba:&
operater je znan kot referenčno operaterja. Več o tem bomo izvedeli v kazalcih C ++.

Opomba: Če v zanki ne spreminjamo polja / vektorja / zbirke, je bolje uporabiti const
ključno besedo v deklaraciji obsega.
// collection is not modified in the loop for (const int &var : num) ( // code )