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の機能で、ちょうど次回確認する。