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

[編集] 関連項目

transform

個人用ツール
名前空間
変種
操作
案内
ツールボックス
他の言語