c – 性能 – 使用迭代器或指针迭代向量?

我正在编写一个需要尽可能好的应用程序.我正在使用VS2012作为我的IDE(和编译器).

我注意到,因为我在向量上迭代,与迭代器相比,指针解决方案在速度方面要快得多.这是为什么?我的意思是,迭代器基本上是一回事.它至少应该是.

看看这个例子:

std::vector<int> v;
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
    // Do stuff with *it
}

for (int* i = &v[0],i <= &v[v.size()-1]; i++) {
    // Do stuff with *i
}

编译器是否需要进行任何优化?我正在使用所有标准设置,因此已启用-O2.提前致谢.

编辑:
我在Release中编译,并使用Ctrl F5运行(没有调试).

EDIT2:
实际的源代码是quicksort的一个实现. Here is a link to the full source,很短,所以检查一下.

解决方法

I’m currently writing an application which needs to perform as good as it can be.

然后抓住一个分析器,看看真正的瓶颈在哪里.当然,在优化代码(发布模式)中.

-O2不是VS2012中的所有内容:有几个#defines操纵标准容器迭代器的行为以限制检查和其他安全检查.您可能希望查找它们(“已检查的迭代器”和“安全SCL”可能会引导您到达正确的站点)并相应地设置它们.

但我非常怀疑对容器的迭代将成为你的瓶颈,还会有其他代码段对性能问题更敏感.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...