【发布时间】:2010-10-22 05:05:42
【问题描述】:
我看到很多类似这样的 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,编译器似乎会将这个测试拉出循环,为两者生成等效的程序集。
【问题讨论】:
-
'ite' 的声明将是一个语法错误,因此您的第一个版本变为“for (const_iterator i = list.begin(), e = list.end(); i != e; + +i)"。这只是比第二种形式多几个字符,所以我只是默认使用它。
-
现在在 C++11 中还有
for(auto it : list),它本质上是第二个。但是好多了。 -
@Cramer 基于范围的 for 循环遍历元素,而不是迭代器位置,因此等价于
for ( const auto& element : list ) -
@boycy,如果您想成为技术人员,两者都不相同,因为迭代器都不是。尝试访问
element->whatever -
@Cramer,范围循环相当于第一种形式,而不是第二种形式(en.cppreference.com/w/cpp/language/range-for)
标签: c++ optimization compiler-construction coding-style iterator