しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

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を取得できない(しようとすると結構助長なコードになるっぽい?)ので, そこは一長一短だなーと覚えておきます.

*1:旧タイトル 『C++ちょっとわからないメモ』です. 更新しました