Диапазонный for
Диапазонный for (range-based for) - это специальная форма цикла for, которая позволяет перебирать элементы контейнера, массива или любой другой последовательности без использования индексов и итераторов. В заголовке цикла мы указываем переменную, в которую будет попадать текущий элемент, и саму коллекцию, которую нужно перебрать. Это делает код короче и безопаснее, так как исключает ошибки выхода за границы контейнера.
Синтаксис
for (type element : collection)
{
// body
}
Здесь type - тип элемента (его можно заменить на auto для автоматического вывода), element - имя переменной, в которую попадает текущий элемент, а collection - контейнер, массив или последовательность, которую мы перебираем.
Пример
Давайте переберём все элементы массива и выведем их на экран:
#include <iostream>
using namespace std;
int main()
{
int arr[] = {1, 2, 3, 4, 5};
for (int el : arr)
{
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте переберём элементы вектора, используя auto для автоматического вывода типа:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (auto el : vec)
{
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
По умолчанию переменная цикла получает копию элемента. Чтобы изменять элементы контейнера прямо в цикле, нужно использовать ссылку:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (int& el : vec)
{
el *= 2;
}
for (int el : vec)
{
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
2 4 6 8 10
Пример
Давайте переберём символы строки "abcde":
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "abcde";
for (char ch : str)
{
cout << ch << " ";
}
return 0;
}
Результат выполнения кода:
"a b c d e"