Пространства имён
Варианты
Действия

std::for_each

Материал из cppreference.com
< cpp‎ | algorithm
 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами(C++20)
Ограниченные алгоритмы, например ranges::copy, ranges::sort, ...
Политики исполнения (C++17)
Немодифицирующие операции над последовательностями
(C++11)(C++11)(C++11)
for_each
(C++17)
Модифицирующие операции над последовательностями
Операции разбиения
Операции сортировки
Операции двоичного поиска
Операции с наборами (в отсортированных диапазонах)
Операции с кучей
(C++11)
Операций минимума/максимума
(C++11)
(C++17)

Операции перестановки
Числовые операции
Операции с неинициализированной памятью
(C++17)
(C++17)
(C++17)
Библиотека C
 
Определено в заголовочном файле <algorithm>
template<class InputIt, class UnaryFunction >
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

По порядку применяет заданный функциональный объект f к результату разыменования каждого итератора в диапазоне [first, last). Если InputIt — изменяемый итератор, то f может изменять элементы диапазона через разыменованный итератор. Если f возвращает результат, то он игнорируется.

Содержание

[править]Параметры

[firstlast) два итератора задающих диапазон элементов для применения функции
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) выполняет цикл по диапазону[править]

close