範囲for文
Java7でやった拡張for文や,Pythonのlist, arrayを与えるfor文のC++版である.
#include <iostream>
int main(){
// 拡張for文を静的確保した配列で使う
int static_array[5] = {1, 2, 3, 4, 5};
for(auto& item: static_array)
std::cout << item << std::endl;
return 0;
}
という形で使う.Java拡張for文やpythonのfor文まんまである.
ちなみにstd::cout << 出力したい変数や文字列 << std::endl;
は,printf()
関数の代わりに使える.
printf関数では,必ず出力する値の型が明確になっていなければならない(print("%d", int型の変数);
など)が,autoを使っていることからわかるように,std::cout
はどんな型でも<<
で連結して出力することができる.(JavaのSystem.out.println関数内つまりStringで,「+」を使って文字列や変数を連結していくのと同じだと捉えるとよい.正確には演算子のオーバーロードを使って実装されている.)
例えばfor文でstd::endl;
を書かないまま回して,for文のループが終了してからstd::out << std::endl;
とすれば,行の出力が命令文をまたぐこともできる.
std::vector
ついでなので,可変長配列std::vector
もやっておく.
JavaでいうところのArrayListに相当する.
std::vector<収納する型> vectorの変数名;
で空の配列(要素0)を宣言し,
vectorの変数名.push_back(追加する要素)
で末尾に要素(この場合はint型の数)を追加していく.
もともと範囲for文は,このstd::vector
のために作られたもので,非常に簡単に回すことができる.(JavaのArrayListと拡張for文の組み合わせと同じように使える)
#include <iostream>
#include <vector>
int main(){
// 可変長配列std::vectorで範囲for文を使う
int numOfElements = 20;
std::vector<int> dynamic_array;
for(int i=0; i<numOfElements; i++){
dynamic_array.push_back(rand());
}
for(auto& item: dynamic_array)
std::cout << item << ",";
std::cout << std::endl;
return 0;
}
std::vector
の詳しい説明は,STLのCollectionの項で行う.