Цикл for each. Range-based циклы.
Циклы, основанные на диапазонах.
Цикл предназначен для контейнеров и итерирования по элементам контейнера и перебирать коллекцию элементов.
В районе 11 стандарта С++ приняли новый вид цикла foreach, до этого IDE создали свои варианты цикла.
foreach (var, container) //QtCreator
{
}
for each (var in container) //Microsoft Visual Studio
{
}
Также существует цикл по стандарту C++ (рекомендуемый к использованию)
for (var : container)
{
//code with var
}
Например:
int Arr[]={1,2,3};
for (int var : Arr)
{
cout<<var<<endl;
}
var – переменная, куда будут записываться элементы контейнера, контейнер – собственно сам контейнер/класс и тд.
Цикл сам отслеживает элементы в контейнере, перебирая их все.
Главный минус – значения элементов КОПИРУЮТСЯ/ПЕРЕДАЮТСЯ ПО ЗНАЧЕНИЮ.
Можно получать элементы по ссылке:
Например:
int Arr[]={1,2,3};
for (int &var : Arr)
{
cout<<var<<endl;
}
Можно использовать и константную буферную переменную
int Arr[]={1,2,3};
for (const int &var : Arr)
{
cout<<var<<endl;
}
for (const auto &var : Mylist)
{
cout<<var<<endl;
}