gpt4 book ai didi

c++ - 递增迭代器 : Is++it more efficient than it++?

转载 作者:IT老高 更新时间:2023-10-28 12:50:14 29 4
gpt4 key购买 nike

Possible Duplicate:
Is there a performance difference between i++ and ++i in C++?

我正在编写一个程序,其中使用迭代器循环 std::vector。有人告诉我,在 for 语句中执行++it 会导致代码更高效。换句话说,他们是在说:

for ( vector<string>::iterator it=my_vector.begin(); it != my_vector.end(); ++it )

跑得比

for ( vector<string>::iterator it=my_vector.begin(); it != my_vector.end(); it++ )

这是真的吗?如果是,效率提升背后的原因是什么?它++/++所做的只是将迭代器移动到 vector 中的下一项,不是吗?

最佳答案

前置增量更快的原因是后置增量必须复制旧值才能返回。如GotW #2说,“前增量比后增量更有效,因为对于后增量,对象必须自增,然后返回一个包含其旧值的临时值。请注意,即使对于像 int 这样的内置函数也是如此。”

GotW #55提供了postincrement的规范形式,这表明它必须做preincrement加上更多的工作:

T T::operator++(int)
{
T old( *this ); // remember our original value
++*this; // always implement postincrement
// in terms of preincrement
return old; // return our original value
}

正如其他人所指出的,某些编译器可能会在某些情况下对此进行优化,但如果您不使用返回值,最好不要依赖此优化。此外,对于具有微不足道的复制构造函数的类型,性能差异可能非常小,尽管我认为在 C++ 中使用预增量是一个好习惯。

关于c++ - 递增迭代器 : Is++it more efficient than it++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1077026/

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