Функция ranges::for_each
Функция ranges::for_each применяет заданную функцию
к каждому элементу диапазона. В первом параметре мы передаём
диапазон, элементы которого нужно обработать, а во второй -
функцию (или лямбда-выражение), которая будет вызвана для
каждого элемента. Функция возвращает объект, содержащий
переданную функцию и позицию конца диапазона.
В отличие от классического std::for_each, версия из
пространства имён ranges принимает диапазон целиком,
а не пару итераторов. Это делает код короче и выразительнее.
Синтаксис
std::ranges::for_each(range, func)
Пример
Давайте применим лямбда-выражение к каждому элементу вектора и выведем его на экран:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
ranges::for_each(v, [](int n) {
cout << n << " ";
});
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте изменим каждый элемент вектора, умножив его
на 2, и выведем результат:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
ranges::for_each(v, [](int& n) {
n *= 2;
});
for (int n : v) {
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4 6 8 10
Обратите внимание, что лямбда-выражение принимает ссылку
int&, поэтому изменения применяются непосредственно
к элементам вектора.
Пример
Давайте применим функцию к каждому символу строки и выведем его в верхнем регистре:
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main()
{
string str = "abcde";
ranges::for_each(str, [](char c) {
cout << (char)toupper(c);
});
cout << endl;
return 0;
}
Результат выполнения кода:
"ABCDE"
Смотрите также
-
функция
ranges::find,
которая ищет элемент в диапазоне -
функция
ranges::count,
которая подсчитывает количество элементов -
функция
ranges::copy,
которая копирует элементы диапазона -
функция
ranges::sort,
которая сортирует элементы диапазона