对于您中的某些人来说,这似乎很琐碎,但是在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/