1. 程式人生 > >5. Range-based for(c++11)

5. Range-based for(c++11)

一般形式:

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
{ 
   ...
}