打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[C 11 : Range

[C++11 : Range-based for]:更简单的序列遍历2012年08月12日 17:35:35

在传统的C++中,遍历一个容器,我们需要这样写:

for (int i = 0; i < v.size(); ++i) {

    dowork(v[i]);

}

或者:

for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter) {

    dowork(*iter);

}

显然,这两种方法中的样板代码都占了很大一部分,影响了我们对代码本质功能的理解。

一个较简的改进是:

for_each(v.begin(), v.end(), dowork);

这个代码相对清晰一些:对序列中的每一个元素,dowork。

出于一些原因,for_each的用法有一些限制。

 

在C++11中,引入了基于序列的for语句,使用它,我们的程序可以更加清晰:

for (int x : v) {

    dowork(x);

}

 

如果要对容器中的东西进行修改:

for (int& x : v) {

    dowork(x);

}

 

或者,如果你懒的话,直接这样:

for (auto& x : v) {

    dowork(x);

}

 

比较一下,使用for (int x: v)的代码,更能清晰表明作者的意图,也不用写那么多的样板代码,多好!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
这几道【哈希表】相关的算法题,面试写不出来就惨了!
Python中迭代器和生成器的区别?
[C++]一份Linq to object的C++实现
Excel利用VBA批量选择数据有效性下拉列表中的项目并打印
日常代码笔记,python的推导式&性能评估
STL模版与容器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服