分享

[C 11 : Range

 行者120 2013-08-12

[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)的代码,更能清晰表明作者的意图,也不用写那么多的样板代码,多好!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多