对于您中的某些人来说,这似乎很琐碎,但是在STL容器上进行以下迭代的以下2种方法中哪一种更好? 为什么选择

class Elem;
typedef vector<Elem> 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:我知道迭代器可以做的不仅仅是简单的索引。但是,请保持答复/讨论集中在上面显示的容器上的简单迭代上。

最佳答案

第一个版本适用于任何容器,因此在将任何容器作为参数的模板函数中更有用。即使对于 vector ,也可以想象它稍微更有效。

第二个版本仅适用于 vector 和其他整数索引的容器。对于那些容器来说,它有些惯用了,C++的新手会很容易理解,如果您需要对索引进行其他操作(这很常见),则很有用。

恐怕像往常一样,没有简单的“这个更好”的答案。

关于C++ STL : Which method of iteration over a STL container is better?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/716762/

10-11 18:20