В този урок ще научим за C ++ диапазона за цикли и неговите най-добри практики с помощта на примери.
C ++ 11 въведе for
цикъла с обхват . Този for
цикъл се използва специално за колекции като масиви и вектори .
Например,
// initialize an int array int num(3) = (1, 2, 3); // use of ranged for loop for (int var : num) ( // code )
Тук for
цикълът с диапазон повтаря номера на масива от началото на до края. В int
променлива реактивна съхранява стойността на елемента на масива във всяка итерация.
Синтаксисът му е,
for (rangeDeclaration : rangeExpression) ( // code )
В горния пример,
- rangeDeclaration -
int var
- rangeExpression - num
Пример 1: Обхват за цикъл, използващ масив
#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; )
Изход
1 2 3 4 5
В този пример декларирахме и инициализирахме int
масив с име numArray. Тук използвахме for
цикъла с диапазон, за да разпечатаме елементите на numArray.
- първа итерация - n приема стойността на първия член на масива, който е
1
- втора итерация - n приема стойността на
2
и след това се отпечатва и т.н.
Забележка: Цикълът за диапазон for автоматично повтаря масива от началото до края му. Не е необходимо да посочваме броя итерации в цикъла.
Пример 2: C ++ обхват за цикъл, използващ вектор
#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; )
Изход
1 2 3 4 5
Пример 3: Деклариране на колекция вътре в цикъла
#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; )
Изход
1 2 3 4 5
Тук сме декларирали колекцията в самия цикъл, т.е.
rangeExpression = (1, 2, 3, 4, 5)
Това също е валиден начин за използване на for
цикъла с диапазон и работи по същия начин, както когато използваме действителен масив или вектор.
C ++ за най-добри практики в Loop
В горните примери декларирахме променлива в for
цикъла, за да съхраняваме всеки елемент от колекцията във всяка итерация.
int num(3) = (1, 2, 3); // copy elements of num to var for (int var : num) ( // code )
По-добре е обаче да напишете диапазона, базиран на цикъл, по следния начин:
// access memory location of elements of num for (int &var : num) ( // code )
Забележете използването на &
преди var. Тук,
int var : num
- Копира всеки елемент от num към променливата var във всяка итерация. Това не е добре за компютърната памет.int &var : num
- Не копира всеки елемент от num във var. Вместо това достъпва елементите на num директно от самия num. Това е по-ефективно.
Забележка: В &
оператора е известен като препратка оператора. Ще научим повече за това в указателите на C ++.
Забележка: Ако не променяме масива / вектора / колекцията в рамките на цикъла, по-добре е да използваме const
ключовата дума в декларацията за диапазон.
// collection is not modified in the loop for (const int &var : num) ( // code )