2026/01/18(日)cpprefjpを読もう。【範囲for文】

C++11 範囲for文 [N2930] cppref

概要

配列、連想コンテナを簡潔に扱うための表現。

std::vector<int> buff;

for(auto e : buff)
{
    std::cout << e << std::endl;
}

注意すべきところは受けとる変数の型指定。
配列なんかを添字でアクセスするのとは違い、(必要ならば)明示的に参照をする必要がある。
重いクラスを扱う際に不必要なコピーが発生していないか注意したい。
cppref上にわかりやすい図があったのでそのまま引用する。

変数宣言 eを変更可能か コンテナ要素を変更可能か
const auto& e NO NO
auto& e YES YES
auto e YES NO
仕様

begin()からend()までの範囲に含まれる要素に対し処理を実行する。

使用上の注意
  • 範囲for文内でコンテナ要素を追加/削除するとイテレータが無効になる場合がある。
  • for-range-initializerに渡したものの寿命が切れてイテレータが無効になる場合がある。
    初期化子リストもC++11の機能で、ちょうど次回確認する。