Range-based for loopとは拡張for文の正式名称です。拡張for文とは既存のfor文では煩わしかった処理をより使いやすくしたものでC++11で実装されました。実際にコードを見たほうがわかりやすいので、普通のfor文との違いを見てみましょう。
//配列の中の値の合計を算出する int num[5]={1,2,3,4,5}; int total=0; //for文でやる場合 for(int i=0;i<5;i++){ total+=num[i]; } //拡張for文でやる場合 for(int i : num){ total+=i; }
ぱっとみた感じすっきりしていることはすぐにわかると思います。ならぜら拡張for文ではループを何回まわすかや配列に添字でアクセスするといった記述がなんらないからです。
構文はこのようになっています
for(型 変数名 : 配列)
このようにするとループ回数は自動的に配列の要素数となり変数名には最初の要素から順に切り替わるため添字のアクセスも必要なくなります。
これは配列だけでなくコンテナでも同様のことができます。また、型推論と組み合わせることによってより効果を発揮します。まだどのくらい便利かがはっきり見えないと思うので従来のやり方と比較したものを見てみましょう。
//コンテナを宣言 vector<int> vec(5); //vecに値を5個追加する処理 addNum(vec); //全ての要素の合計を求める int sum=0; //従来のやり方 vector<int>::iterator begin; for( begin=vec.begin(); begin != vec.end(); begin++ ){ sum+=(*begin); } //C++11を堪能したやり方 for( auto n : vec ){ sum+=n; }
これを知ってしまっては従来のやり方に戻ることはできませんね。配列やコンテナで全ての要素に対してなにかをしたい時には積極的に使っていきましょう。