V tomto tutoriále sa pomocou príkladov dozvieme o cykloch C ++ pre cykly a jeho osvedčených postupoch.
C ++ 11 predstavil pohyblivú for
slučku. Táto for
slučka sa špeciálne používa s kolekciami, ako sú polia a vektory .
Napríklad,
// initialize an int array int num(3) = (1, 2, 3); // use of ranged for loop for (int var : num) ( // code )
Tu pohyblivá for
slučka iteruje číslo poľa od začiatku do konca. int
Premenná var ukladá hodnotu prvku poľa v každom opakovaní.
Jeho syntax je,
for (rangeDeclaration : rangeExpression) ( // code )
Vo vyššie uvedenom príklade
- rangeDeclaration -
int var
- rangeExpression - počet

Príklad 1: Na rade pre slučku pomocou poľa
#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; )
Výkon
1 2 3 4 5
V tomto príklade sme deklarovali a inicializovali int
pole s názvom numArray. Tu sme pomocou for
pohyblivej slučky vytlačili prvky numArray.
- prvá iterácia - n berie hodnotu prvého člena poľa, čo je
1
- druhá iterácia - n prevezme hodnotu
2
a potom sa vytlačí atď.
Poznámka: Smyčka ranged for automaticky iteruje pole od jeho začiatku do konca. Nie je potrebné zadávať počet iterácií v slučke.
Príklad 2: C ++ pre slučku pomocou vektora
#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; )
Výkon
1 2 3 4 5
Príklad 3: Deklarovať zbierku vo vnútri slučky
#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; )
Výkon
1 2 3 4 5
Tu sme deklarovali kolekciu v rámci samotnej slučky, tj
rangeExpression = (1, 2, 3, 4, 5)
Toto je tiež platný spôsob použitia pohyblivej for
slučky a funguje to rovnako, ako keď používame skutočné pole alebo vektor.
Najlepšie postupy pre slučku v rozsahu C ++
Vo vyššie uvedených príkladoch sme deklarovali premennú v for
slučke na uloženie každého prvku kolekcie v každej iterácii.
int num(3) = (1, 2, 3); // copy elements of num to var for (int var : num) ( // code )
Je však lepšie napísať rozsah založený na cykle for takto:
// access memory location of elements of num for (int &var : num) ( // code )
Všimnite si použitie &
pred var. Tu,
int var : num
- Skopíruje každý prvok num do premennej var v každej iterácii. To nie je dobré pre pamäť počítača.int &var : num
- Nekopíruje každý prvok čísla do var. Namiesto toho pristupuje k prvkom num priamo zo samotného čísla. To je efektívnejšie.
Poznámka:&
operátor je známy ako referenčný operátor. Viac sa o tom dozvieme v ukazovateľoch C ++.

Poznámka: Ak nemeníme pole / vektor / kolekciu v rámci cyklu, je lepšie použiť const
kľúčové slovo v deklarácii rozsahu.
// collection is not modified in the loop for (const int &var : num) ( // code )