当前位置:嗨网首页>书籍在线阅读

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),编译器将推断出x的类型为Review,而循环将依次将books中的每个Review对象传递给ShowReview()。

不同于for_each(),基于范围的for循环可修改容器的内容,诀窍是指定一个引用参数。例如,假设有如下函数:

void InflateReview(Review &r){r.rating++;}

可使用如下循环对books的每个元素执行该函数:

for (auto & x : books) InflateReview(x);