std::for_each
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <algorithm>
|
||
template< class InputIt, class UnaryFunction > UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f ); |
||
По порядку применяет заданный функциональный объект f к результату разыменования каждого итератора в диапазоне [first, last). Если InputIt — изменяемый итератор, то f может изменять элементы диапазона через разыменованный итератор. Если f возвращает результат, то он игнорируется.
Параметры
[first, last)
|
— | два итератора задающих диапазон элементов для применения функции |
| f | — | применяемый унарный функциональный объект |
| Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator.
| ||
-UnaryFunction должен соответствовать требованиям MoveConstructible. Не обязательно CopyConstructible
| ||
Возвращаемое значение
f. |
(до C++11) |
std::move(f). |
(начиная с C++11) |
Сложность
Ровно last - first применений f.
Возможная реализация
template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
for (; first != last; ++first) {
f(*first);
}
return f;
}
|
Пример
В следующем примере используется лямбда-функция для инкрементации всех элементов вектора, а затем считается их сумма:
Запустить этот код
#include <vector>
#include <algorithm>
#include <iostream>
struct Sum {
Sum() { sum = 0; }
void operator()(int n) { sum += n; }
int sum;
};
int main()
{
std::vector<int> nums{3, 4, 2, 9, 15, 267};
std::cout << "до: ";
for (auto n : nums) {
std::cout << n << " ";
}
std::cout << '\n';
std::for_each(nums.begin(), nums.end(), [](int &n){ n++; });
Sum s = std::for_each(nums.begin(), nums.end(), Sum());
std::cout << "после: ";
for (auto n : nums) {
std::cout << n << " ";
}
std::cout << '\n';
std::cout << "сумма: " << s.sum << '\n';
}
Вывод:
до: 3 4 2 9 15 267
после: 4 5 3 10 16 268
сумма: 306
См. также
| применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне (шаблон функции) | |
диапазонный цикл for(C++11)
|
выполняет цикл по диапазону |