この前、for_eachはforより抽象化レベルが高くて、関数分離しやすいというメリットがあるので、C++11使うなら、なるべくforではなく、for_eachを使った方がいいよという話があって、”速度はどうなるの?”と聞かれて、内部ではiteratorを使っているから、同じになるじゃないかと思うが、自信がないです。そのため、速度を測りました。

ソースコードは以下のようになります

#include <iostream>
#include <algorithm>
#include <vector>

int main(int argc, char *argv[])
{
    const size_t n = 9000000000;
    std::vector<size_t> arr(n);

    size_t each_count = 1;
    auto start_each = std::chrono::system_clock::now();
    std::for_each(arr.begin(), arr.end(), [&](size_t &i){
            i = each_count++;
        });
    auto end_each = std::chrono::system_clock::now();
    std::cout << "for_each:" << (end_each - start_each).count() << std::endl;

    size_t for_count = 1;
    auto start_for = std::chrono::system_clock::now();
    for (size_t i = 0; i < arr.size(); i++) {
        arr[i] = for_count++;
    }
    auto end_for = std::chrono::system_clock::now();
    std::cout << "for     :" << (end_for - start_for).count() << std::endl;
    return 0;
}

テストOSははmacOS Sierra、メモリは8GB、CPUは2.4 GHz Intel Core i7です。最適化についてO2を付けました。

複数回で実行して、平均をとると、

for_each: 30059
for     : 30824

結論として、for_eachを安心に使ってください。