C ++ Ranged for Loop (с примерами)

В этом руководстве мы узнаем о циклах 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 )

Интересные статьи...