Как работает цикл foreach в C++

В 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:

Добавить комментарий