※C++11以降のお話
C#やPHPではforeachを使った事があったが、C++では使った経験が無く、同じようなものがあったら便利だなと思い調べてみました。
正確にC++では「範囲ベース for ループ」と言うらしいです。
#拡張for文とは?
ノーマルfor文は条件を指定して繰り返しを行います。拡張forは配列、コンテナなどの要素数があるものの全要素に対して処理を行うものです。全要素にアクセスしたい時はノーマルfor文よりスマートにプログラムが書けます。
#使い方
//ノーマルfor文
for(/*初期化式*/;/*条件式*/;/*変化式*/){
//処理
}
//範囲for文
for(/*変数宣言*/ : /*範囲*/){
//処理
}
例)
#include <iostream>
int main()
{
int score[5] = {1, 2, 3, 4, 5};
for(int s : score)
{
std::cout << s << std::endl;
}
std::vector<int> count{1, 2, 3, 4, 5};
for(auto&& x : count) {
std::cout << c << std::endl;
}
}
変数宣言にauto&&
を使用すると便利とのこと
#仕様
C++日本語リファレンスによると
値の型が配列の場合、配列のサイズが分かるものでなければエラーとなる。値の型が配列以外(クラスなど)の場合、begin()とend()で範囲の先頭と終端が表せるものでなければエラーとなる。語弊を恐れず言えば、メンバ関数にbegin()およびend()を持つクラスであれば、何でも範囲for文の範囲として指定できる。
とのことなので、自作クラスにも使用したいときはbegin()
とend()
のメンバ関数を実装すれば良い!
これを使えば配列の要素を変えてもfor文の条件式を書き換える必要がなくなる!便利!!