Цикл foreach в C++
Введение
Цикл foreach в C++ или, точнее, цикл for на основе диапазона был введен в C++11. Этот тип структуры цикла for упрощает обход итерируемого набора данных. Это достигается за счет устранения процесса инициализации и обхода каждого элемента, а не итератора. Итак, давайте углубимся в соответствующую структуру цикла foreach.
Работа цикла foreach в C++
Таким образом, в основном цикл for-each выполняет итерацию по элементам векторов или любых других наборов данных. Он присваивает значение текущего элемента переменной iterator, объявленной внутри цикла. Рассмотрим подробнее синтаксис:
for(type variable_name : array/vector_name)
{
loop statements
...
}
Как мы можем видеть:
- Во время инициализации цикла объявление элементарной переменной — это та часть, где нам нужно объявить переменную, которая будет перебирать массив или вектор. Здесь
type
— это тип данных variable_name - Имя массива/вектора – это имя соответствующего набора данных, по которому будет проходить цикл.
- операторы цикла — это различные операции, которые пользователь может выполнять над соответствующими элементами с использованием переменной итерации.
Примечание. Рекомендуется оставить тип данных переменной таким же, как у массива или вектора. Если тип данных не один и тот же, то элементы будут преобразованы по типу, а затем сохранены в переменной.
Примеры цикла foreach
1. Пример цикла 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;
}
Выход:
2. Пример цикла foreach для векторов в C++
Следующий код иллюстрирует использование цикла for-each для перебора vector
.
#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 в C++
1. Преимущества цикла foreach
- Это исключает возможность ошибок и делает код более читабельным.
- Простота реализации
- Не требует предварительной инициализации итератора
2. Недостатки цикла foreach
- Невозможно получить прямой доступ к индексам соответствующих элементов
- Невозможно обходить элементы в обратном порядке.
- Он не позволяет пользователю пропустить какой-либо элемент при переходе по каждому из них.
Заключение
Цикл foreach в C++ имеет свои плюсы и минусы. Код легко читается, но он ограничивает некоторые действия, предлагаемые обычным циклом for. Следовательно, это полностью зависит от пользователя, что он/она хочет, чтобы цикл выполнял, и выбирает соответственно.
Рекомендации
- https://stackoverflow.com/questions/16504062/how-to-make-the-for-each-loop-function-in-c-work-with-a-custom-class