17-基于范围的for循环(C++11)
16.3.4 基于范围的for循环(C++11)
第5章说过,基于范围的for循环是为用于STL而设计的。为复习该循环,下面是第5章的第一个示例:
double prices[5] = {4.99, 10.99, 6.87, 7.99, 8.49};
for (double x : prices)
cout << x << std::endl;
在这种for循环中,括号内的代码声明一个类型与容器存储的内容相同的变量,然后指出了容器的名称。接下来,循环体使用指定的变量依次访问容器的每个元素。例如,对于下述摘自程序清单16.9的语句:
for_each(books.begin(), books.end(), ShowReview);
可将其替换为下述基于范围的for循环:
for (auto x : books) ShowReview(x);
根据book的类型(vector
不同于for_each(),基于范围的for循环可修改容器的内容,诀窍是指定一个引用参数。例如,假设有如下函数:
void InflateReview(Review &r){r.rating++;}
可使用如下循环对books的每个元素执行该函数:
for (auto & x : books) InflateReview(x);