C++における範囲ベース for ループ
C++でカウンタを使わずに, 要素を1つづつ参照する方法として, 範囲ベース for ループなるものを見つけたのでまとめておきます*1
範囲ベース for ループとは
C++11から新しく追加された言語機能. range-based for loopとも書くらしい.
似た機能として'for_each'があるらしいが, あちらはSTLの関数テンプレートであり, こちらはネイティブの機能として追加されたものであるらしい.
記法は以下の通り.
int v[] = {1, 2, 3, 4, 5}; for(auto &x : v) { std::cout << x << "\n"; }
基本的な記法は, for ( xxx : array ) { }
らしいのだが,
型名を記述しないために同じくC++11で導入されたautoを使用.
加えて, 無駄なコストを書けないために参照渡し&x
の形をとっている.
参照渡しをしているのでx
の値を書き換えると, その時参照しているvの値も変わるので注意.
値を書き換えたくないときは, const auto &x : v
をすればよい.
indexを取得できない(しようとすると結構助長なコードになるっぽい?)ので, そこは一長一短だなーと覚えておきます.