Как работает цикл foreach в C++
Development | Комментировать запись
В 11 версии C++ был введён цикл foreach, который основан на диапазонах. Этот тип структуры цикла упрощает перебор итерируемого набора данных. Получается это за счет устранения процесса инициализации и каждого элемента, а не итератора.
Читайте также: Преобразование в верхний и нижний регистр в C++
Работа цикла foreach в C++
В основном цикл for-each перебирает элементы массивов, векторов или любых других наборов данных. Он присваивает значение текущего элемента переменной итератора, объявленной внутри цикла. Рассмотрим подробнее синтаксис:
for(type variable_name : array/vector_name) { loop statements ... }
Здесь мы видим следующее:
- Во время инициализации цикла объявление переменной — это та часть, где нам нужно объявить переменную, которая будет перебирать массив или вектор. Здесь тип — это тип данных variable_name.
- array/vector_name — это имя соответствующего набора данных, по которому будет проходить цикл,
- loop statements — это различные операции, которые пользователь может выполнить над соответствующими элементами с помощью переменной итерации.
Примечание. Рекомендуем оставить тип данных переменной таким же, как у массива или вектора. Если тип данных не одинаковый, элементы будут преобразованы циклом по типу, а затем сохранены в переменной.
Примеры цикла foreach
foreach в массивах C++
Нижеприведенный пример кода показывает использование цикла for-each в C++.
#include<iostream> using namespace std; int main() { int arr[]={1,2,3,4,5}; //array initialization cout<<"The elements are: "; for(int i : arr) { cout<<i<<" "; } return 0; }
Вы получите:
The elements are: 1 2 3 4 5
Как это работает:
- Массив arr[] инициализируется со значениями {1, 2, 3, 4, 5}.
- Внутри структуры цикла «i» — это переменная, в которой хранится значение текущего элемента массива.
- arr — имя массива, которое также служит его базовым адресом.
- вывод «i» для каждой итерации дает нам нужные элементы массива, в отличие от индексов массива в обычном цикле for.
Обратите внимание: при объявлении переменной «i» можно использовать тип данных auto, а не int. Это гарантирует, что тип переменной выводится из типа массива и не возникает конфликтов типов данных.
Например:
#include<iostream> using namespace std; int main() { int array[]={1,4,7,4,8,4}; cout<<"The elements are: "; for(auto var : array) { cout<<var<<" "; } return 0; }
Вы получите такой вывод:
foreach в векторах C++
Ниже показан код использования цикла for-each для перебора вектора.
#include<iostream> #include<vector> using namespace std; int main() { vector<int> vec={11,22,33,44,55,66}; cout<<"The elements are: "; for(auto var : vec) { cout<<var<<" "; } return 0; }
Мы получим такой вывод:
Цикл for-each работает с векторами так же, как и с массивами. Отличается только объявление вектора, инициализация и различные операции, которые с ним можно выполнять.
Преимущества и недостатки цикла foreach
Преимущества цикла:
- Исключает ошибки и делает код более читабельным.
- Легко реализовать
- Не требует предварительной инициализации итератора
Недостатки:
- Невозможно напрямую получить доступ к соответствующим индексам элементов.
- Нет возможности перебрать элементы в обратном порядке.
- Цикл не дает пропустить какой-либо элемент, перебирая все строго по порядку.
Заключение
Как видите, у цикла foreach в C++ есть свои плюсы и минусы. Код легко читается, но не поддерживает некоторые действия, предлагаемые циклом for. Так что это полностью зависит от пользователя, что он хочет, чтобы цикл делал, и выбирает соответственно.
Tags: C++