当前位置:  开发笔记 > 编程语言 > 正文

C++ STL:哪种迭代方法比STL容器更好?

如何解决《C++STL:哪种迭代方法比STL容器更好?》经验,为你挑选了3个好方法。

这对你们中的一些人来说可能看起来很无聊,但是对于STL容器,以下哪两种迭代方法更好?为什么

class Elem;
typedef vector ElemVec;
ElemVec elemVec;

// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
    Elem& e = *i;
    // Do something
}

// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
    Elem& e = elemVec.at(i);
    // Do something
}

方法0似乎更清晰STL,但方法1使用较少的代码实现相同.在容器上简单重复的事情似乎在以任何源代码的地方.所以,我倾向于选择方法1,这似乎可以减少视觉混乱和代码大小.

PS:我知道迭代器可以做的不仅仅是一个简单的索引.但是,请将回复/讨论集中在如上所示的容器上的简单迭代上.



1> 小智..:

第一个版本适用于任何容器,因此在将任何容器作为参数的模板函数中更有用.即使对于矢量,它也可以略微提高效率.

第二个版本仅适用于矢量和其他整数索引容器.对于那些容器来说,它更加惯用,C++的新手很容易理解它,如果你需要对索引执行其他操作,这很有用,这种情况并不少见.

像往常一样,我担心没有简单的"这个更好"的答案.



2> Benoît..:

如果你不介意(非常?)小的效率损失,我建议使用Boost.Foreach

BOOST_FOREACH( Elem& e, elemVec )
{
    // Your code
}



3> Stefan..:

方法0更快,因此建议使用.

方法1使用size(),允许为O(1),具体取决于容器和stl实现.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有