您的位置:首页 > 编程语言 > C语言/C++

一些C++11语言新特性 - Range-Based for Loops

2015-06-29 17:02 543 查看
1. Range-Based for Loops

for ( decl : coll ) {
statement
}

eg:

for ( int i : { 2, 3, 5, 7, 9, 13, 17, 19 } ) {
std::cout << i << std::endl;
}


std::vector<double> vec;
...
for ( auto& elem : vec ) {
elem *= 3;
}


Here, declaring elem as a reference is important because otherwise the statements in the body of the for loop act on a local copy of the elements in the vector (which sometimes also might be useful).

This means that to avoid calling the copy constructor and the destructor for each element, you should usually declare the current element to be a constant reference. Thus, a generic function to print all elements of a collection should be implemented as follows:

template <typename T>
void printElements (const T& coll)
{
for (const auto& elem : coll) {
std::cout << elem << std::endl;
}
}


那段range-based for loops代码等价于如下:

for (auto _pos=coll.begin(); _pos != coll.end(); ++_pos ) {
const auto& elem = *_pos;
std::cout << elem << std::endl;
}


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 } ) { // print 15 30 60
std::cout << elem << std::endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: