gpt4 book ai didi

c++ - 在 C++ 中为循环编写迭代器的更好方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:53 26 4
gpt4 key购买 nike

对于一个非常简单的事情,例如打印 vector 中的每个元素,在 C++ 中使用什么方法更好?

我一直在用这个:

for (vector<int>::iterator i = values.begin(); i != values.end(); ++i)

之前,但在我看到的其中一个 Boost::filesystem 示例中是这样的:

for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)

对我来说,它看起来更复杂,我不明白为什么它比我一直使用的更好。

你能告诉我为什么这个版本更好吗?或者它对于像打印 vector 元素这样的简单事情并不重要?

i != values.end() 是否会使迭代变慢?

或者是 const_iterator 还是 iterator? const_iterator 在这样的循环中更快吗?

最佳答案

  1. Foo x = y;Foo x(y); 是等价的,所以使用你喜欢的那个。

  2. end boost 到循环之外可能是也可能不是编译器无论如何都会做的事情,无论如何,它明确表明容器端没有改变。

  3. 如果您不打算修改元素,请使用常量迭代器,因为这就是它们的意思。

for (MyVec::const_iterator it = v.begin(), end = v.end(); it != end; ++it)
{
/* ... */
}

在 C++0x 中,使用auto+cbegin():

for (auto it = v.cbegin(), end = v.cend(); it != end; ++it)

(也许您想使用现成的 container pretty-printer ?)

关于c++ - 在 C++ 中为循环编写迭代器的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672056/

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