В этом руководстве мы узнаем о циклах 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 - число
Работа цикла по ранжированию в C ++
Пример 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 ++.
Работа с указанием адреса в C ++ в диапазоне для цикла
Примечание. Если мы не изменяем массив / вектор / коллекцию внутри цикла, лучше использовать constключевое слово в объявлении диапазона.
// collection is not modified in the loop for (const int &var : num) ( // code )








