循环陷阱中的C ++迭代器?

时间:2010-06-22 02:46:34

标签: c++ stl iterator

我在某处提到:

for ( itr = files.begin(); itr < files.end(); ++itr )  // WRONG
for ( itr = files.begin(); itr != files.end(); ++itr ) // ok

为什么第一个表达式错了?我总是使用第一个表达式,并没有任何问题。

3 个答案:

答案 0 :(得分:21)

排序比较,例如<><=>=将适用于随机访问迭代器,但许多其他迭代器(例如链接列表上的双向迭代器) )仅支持相等性测试(==!=)。通过使用!=,您可以在以后更换容器而无需更改尽可能多的代码,这对于需要使用许多不同容器类型的模板代码尤为重要。

答案 1 :(得分:7)

有不同类型的迭代器。只有随机访问迭代器才支持<运算符。其他类型的迭代器(双向,输入,输出和转发)则没有。但是所有迭代器都支持==!=运算符。因此,如果使用!=,则代码将适用于所有类型的迭代器。

答案 2 :(得分:5)

前者只适用于支持operator <的迭代器,而不是所有迭代器都支持它。