std::for_each
提供:cppreference.com
<algorithm>内に定義されています。
template< class InputIterator, class UnaryFunction > UnaryFunction for_each( InputIterator first, InputIterator last, UnaryFunction f );
[first, last)の範囲において、デレファレンスされたイテレータに対し、関数オブジェクトfを順次適用します。InputIteratorがmutable iterator(参照を返値とするイテレータ)ならば、fはデレファレンスされたイテレータを介して要素に変更を加えることができます。fが値を返しても、返値は無視されます。
目次 |
[編集] 引数
first, last - 関数オブジェクトを適用する範囲
f - 適用される単項の関数オブジェクト(C++11においてはムーブすることができます)
[編集] 返値
f - C++11以前
std::move(f) - C++11以降
[編集] 計算量
last - first回、fを適用することと同じ
[編集] 等価関数
template<class InputIterator, class UnaryFunction> UnaryFunction for_each(InputIterator first, InputIterator last, UnaryFunction f) { for (; first != last; ++first) { f(*first); } return f; }
[編集] 例
以下の例は ラムダ関数を用いて、vector内の全ての要素をインクリメントし、総和を計算しています。
#include <vector> #include <algorithm> 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 << "before: "; 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 << "after: "; for (auto n : nums) { std::cout << n << " "; } std::cout << '\n'; std::cout << "sum: " << s.sum << '\n'; }
出力:
before: 3 4 2 9 15 267 after: 4 5 3 10 16 268 sum: 306