我看到很多类似这样的 c++ 代码:
for( const_iterator it = list.begin(),
const_iterator ite = list.end();
it != ite; ++it)
相对于更简洁的版本:
for( const_iterator it = list.begin();
it != list.end(); ++it)
这两种约定的速度会有什么不同吗?因为 list.end() 只被调用一次,所以第一个会稍微快一些。但由于迭代器是 const,编译器似乎会将这个测试拉出循环,为两者生成等效的程序集。
最佳答案
虽然这两个版本不一样。在第二个版本中,它每次都会将迭代器与 list.end()
进行比较,而 list.end()
的评估结果可能会在循环过程中发生变化。现在当然不能通过 const_iterator it
来修改 list
;但没有什么能阻止循环内的代码直接调用 list
上的方法并对其进行变异,这可能(取决于 list
是哪种数据结构)改变结束迭代器。因此,在某些情况下,预先存储结束迭代器可能是不正确的,因为当您访问它时,它可能不再是正确的结束迭代器。
关于C++ 迭代器和循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795987/