range-based for ループ


概要

C++03で、コンテナの各要素に対して処理をするループを記述しようとした場合、冗長な記述を強いられていた。 そこで、C++11ではJava言語などにあるような for(変数名 : 式) の構文が新規追加された。これを Range-based (for) loopと呼ぶ。

この構文を使用するとvectorに対するループを以下のように記述できる。

std::vector<int> v{1, 2, 3, 4, 5};
for(const int i : v) {
    std::cout << i << std::endl;
}

上記の変数の宣言を参照型にすることで、コンテナの各要素を変更することもできる。

std::vector<int> v{1, 2, 3, 4, 5};
for(int& i : v) {
    i *= 2;
}

この Range-based for loop の構文は、コロンに続く式の型が以下の場合に適用できる。

  • 配列型 ※ 但し、配列のサイズが不明、もしくは不完全な型の配列の場合は ill-formed
  • クラス型、かつアクセス可能な begin(), end() のメンバ関数が定義されている
  • 上記以外で、begin(式), end(式) として適用できる型 ※ begin, endの非メンバ関数が定義されている

results matching ""

    No results matching ""