递增迭代器:++它比它++更有效率? [英] Incrementing iterators: ++it more efficient than it++?
问题描述
Possible Duplicate:
Is there a performance difference between i++ and ++i in C++?
我编写一个程序,其中迭代器用于循环通过std :: vector。有人告诉我,在for语句中做的++导致更高效的代码。换句话说,他们说:
I am writing a program where an iterator is used to loop through a std::vector. Somebody told me that doing ++it in the for statement leads to more efficient code. In other words, they are saying that:
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++ )
这是真的吗?如果是,效率提高背后的原因是什么?所有它++ / ++它是将迭代器移动到向量中的下一个项目,不是吗?
Is this true? If it is, what is the reason behind the efficiency improvement? All it++/++it does is move the iterator to the next item in the vector, isn't it?
推荐答案
后增加更快的原因是后增量必须使旧值的副本返回。正如 GotW#2 所说,预增量比后增量更有效,因为对于后增量,对象必须增量本身,
The reason behind the preincrement being faster is that post-increment has to make a copy of the old value to return. As GotW #2 put it, "Preincrement is more efficient than postincrement, because for postincrement the object must increment itself and then return a temporary containing its old value. Note that this is true even for builtins like int."
GotW#55 提供了postincrement的规范形式,这表明它必须做preincrement加一些更多的工作:
GotW #55 provides the canonical form of postincrement, which shows that it has to do preincrement plus some more work:
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 ++中的好习惯。
As others have noted, it's possible for some compiler to optimize this away in some cases, but if you're not using the return value it's a good idea not to rely on this optimization. Also, the performance difference is likely to be very small for types which have trivial copy constructors, though I think using preincrement is a good habit in C++.
这篇关于递增迭代器:++它比它++更有效率?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!