C++のいくつかあるfor文について自分でもよくわかっていなかったので改めて調べた。
次のとおり全部で4つのfor文がある。
コーディング規約とか性能を気にしなければ各人の好みだが、基本は「範囲ベースの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; }