gpt4 book ai didi

C++ STL : Which method of iteration over a STL container is better?

转载 作者:IT老高 更新时间:2023-10-28 23:03:38 25 4
gpt4 key购买 nike

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

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 用更少的代码实现了相同的效果。对容器的简单迭代是all 出现在任何源代码中的位置。所以,我倾向于选择方法 1,它似乎可以减少视觉困惑和代码大小。

PS:我知道迭代器可以做的不仅仅是一个简单的索引。但是,请保持回复/讨论的重点是对容器的简单迭代,如上所示。

最佳答案

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

第二个版本仅适用于 vector 和其他整数索引容器。对于那些容器来说,它会更惯用一些,C++ 新手很容易理解,如果您需要对索引做其他事情,这很有用,这并不少见。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com