5. Range-based for(c++11)
阿新 • • 發佈:2018-12-20
一般形式:
for( decl : coll)
{
Statement;
}
可以將vector vec中的各個元素乘3。
std::vector<double> vec;
...
for ( auto& elem : vec )
{
elem *= 3;
}
以下兩種情況表示的是同一種操作:
for ( decl : coll ) { //statement } for (auto _pos=coll.begin(), _end=coll.end(); _pos!=_end; ++_pos ) { decl = *_pos; Statement } //如果不滿足上面的那種,那麼便可以用下面的形式表示: for (auto _pos=begin(coll), _end=end(coll); _pos!=_end; ++_pos ) { decl = *_pos; statement }
而且你也可以使用尋常的固定大小的C風格陣列:
int array[] = { 1, 2, 3, 4, 5 };
long sum=0; // process sum of all elements
for (int x : array)
{
sum += x;
}
for (auto elem : { sum, sum*2, sum*4 } )
{
std::cout << elem << std::endl;
}
//輸出:15,30,60
但是當建構函式被explicit修飾的時候,下面這樣就不被允許:
class C { public: explicit C(const std::string& s){...}; // explicit(!) type conversion from strings }; ... std::vector<std::string> vs; for (const C& elem : vs) // ERROR, no conversion from string to C defined { ... }