C++のfor文

C++のいくつかあるfor文について自分でもよくわかっていなかったので改めて調べた。

次のとおり全部で4つのfor文がある。

  1. インデックスを使ったfor
  2. イテレータを使ったfor
  3. std::for_eachを使ったfor
  4. 範囲ベースのfor(C++11以後で使える)

コーディング規約とか性能を気にしなければ各人の好みだが、基本は「範囲ベースのfor」を使い、インデックスもほしければ「インデックスを使ったfor」を使えばよさそう。

コード

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

int main() {
    std::vector<int> v = {1, 2, 3, 4};

    // ----------------------------------------------------------------
    // for by index
    // ----------------------------------------------------------------
    for(size_t i = 0; i < v.size(); i++) {
        printf("%d ", v[i]);
    }
    printf("\n");

    // ----------------------------------------------------------------
    // for by iterator
    // ----------------------------------------------------------------
    for(std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        printf("%d ", *it);
    }
    printf("\n");

    // ----------------------------------------------------------------
    // for by std::for_each
    // ----------------------------------------------------------------
    std::for_each(v.begin(), v.end(), [](int i) {
        printf("%d ", i);
    });
    printf("\n");

    // ----------------------------------------------------------------
    // for by range (c++11 later)
    // ----------------------------------------------------------------
    for(int i : v) {
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}

補足:代入するとき

「std::for_eachを使ったfor」、「範囲ベースのfor」で代入するときは、参照(&)をつければOK。

    std::for_each(v.begin(), v.end(), [](int& i) {
        i += 1;
    });

    for(int& i : v) {
        i += 2;
    }