【发布时间】:2010-10-19 19:31:18
【问题描述】:
我们的编码指南更喜欢const_iterator,因为与普通的iterator 相比,它们要快一些。当您使用const_iterator 时,编译器似乎优化了代码。
这真的正确吗?如果是,那么内部究竟发生了什么让const_iterator 更快?
编辑:我写了一个小测试来检查 const_iterator 与 iterator 并发现不同的结果:
对于 10,000 个对象 const_terator 的迭代减少了几毫秒(大约 16 毫秒)。但并非总是。有一些迭代是相等的。
【问题讨论】:
-
在你的测量中,你测量了墙上的时间吗?
-
是的。该代码看起来类似于@Neil Butterworth 发布的代码。我使用 GetTickCount() 进行时间测量
-
在进行测试时,您应该考虑可能存在的问题,例如缓存,这很容易使首次运行的测试变慢,但甚至可以使其更快(如果您碰巧将容器的元素填充得更近到
begin()最后)。让程序设置数据,对每个迭代器进行一次传递(丢弃那些时间),然后对每个迭代器进行大量传递并报告结果是一个好主意)。最小值比平均值更有意义。确保通道没有被优化(例如,使用迭代器来接触一些 volatile 变量)。 -
16 毫秒太小,意义不大。运行测试 5-10 秒以获得一些可比较的结果。
标签: c++ stl iterator const-iterator