递增迭代器:++it 比 it++ 更高效吗? [复制]

2024-05-20

可能的重复:
C++ 中 i++ 和 ++i 之间有性能差异吗? https://stackoverflow.com/questions/24901/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++ )

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


预增量更快的原因是后增量必须复制旧值才能返回。作为GotW #2 http://www.gotw.ca/gotw/002.htm说的是,“预增量比后增量更有效,因为对于后增量,对象必须增量自身,然后返回包含其旧值的临时值。请注意,即使对于像 int 这样的内置函数也是如此。”

GotW #55 http://www.gotw.ca/gotw/055.htm提供了后置增量的规范形式,这表明它必须进行前置增量以及更多的工作:

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++ 中使用预自增是一个好习惯。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递增迭代器:++it 比 it++ 更高效吗? [复制] 的相关文章

随机推荐