Поиск по сайту:

Цикл 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