В этом руководстве мы узнаем о циклах 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
цикл выполняет итерацию массива num от начала до конца. int
Переменная переменная сохраняет значение элемента массива в каждой итерации.
Его синтаксис:
for (rangeDeclaration : rangeExpression) ( // code )
В приведенном выше примере
- rangeDeclaration -
int var
- rangeExpression - число

Пример 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 ++ Ranged for Loop Best Practices
В приведенных выше примерах мы объявили переменную в for
цикле для хранения каждого элемента коллекции на каждой итерации.
int num(3) = (1, 2, 3); // copy elements of num to var for (int var : num) ( // code )
Однако лучше написать цикл for на основе дальности следующим образом:
// 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 )