说吧,我有一个
std::vector<SomeClass *> v;
在我的代码中,我需要在程序中经常访问其元素,向前和向后循环它们。
这两者之间哪一种访问速度最快?
迭代器访问:
std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;
// i loops forward, j loops backward
for( i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++ ){
// some operations on v items
}
下标访问(按索引)
std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();
// i loops forward, j loops backward
for( i = 0, j = size - 1; i < size && j >= 0; i++, j-- ){
// some operations on v items
}
而且, const_iterator 是否提供了一种更快的方法来访问向量元素,以防我不必修改它们?
性能差异可能可以忽略不计或没有(编译器可能会将它们优化为相同);您应该担心其他事情,例如您的程序是否正确(缓慢但正确的程序比快速但不正确的程序要好)。不过,使用迭代器还有其他优点,例如能够将底层容器更改为没有迭代器的容器。operator[]
无需修改您的循环。看这个问题 https://stackoverflow.com/questions/2515527/use-of-iterators-over-array-indices了解更多。
与普通迭代器相比,const_iterators 很可能没有或可以忽略不计的性能差异。它们旨在通过防止修改不应该修改的内容来提高程序的正确性,而不是为了性能。这同样适用于const
关键字一般。
简而言之,在发生以下两件事之前,优化不应该成为您关注的问题:1)您注意到它运行了太慢了 and 2) 您已经分析了瓶颈。对于 1),如果它的运行速度比实际速度慢十倍,但只运行一次并且花费 0.1 毫秒,谁在乎呢?对于2),确保它确实是瓶颈,否则优化它会几乎没有可测量的效果论性能!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)