我在某处提到:
for ( itr = files.begin(); itr < files.end(); ++itr ) // WRONG
for ( itr = files.begin(); itr != files.end(); ++itr ) // ok
为什么第一个表达式错了?我总是使用第一个表达式,并没有任何问题。
答案 0 :(得分:21)
排序比较,例如<
,>
,<=
,>=
将适用于随机访问迭代器,但许多其他迭代器(例如链接列表上的双向迭代器) )仅支持相等性测试(==
和!=
)。通过使用!=
,您可以在以后更换容器而无需更改尽可能多的代码,这对于需要使用许多不同容器类型的模板代码尤为重要。
答案 1 :(得分:7)
有不同类型的迭代器。只有随机访问迭代器才支持<
运算符。其他类型的迭代器(双向,输入,输出和转发)则没有。但是所有迭代器都支持==
和!=
运算符。因此,如果使用!=
,则代码将适用于所有类型的迭代器。
答案 2 :(得分:5)
前者只适用于支持operator <
的迭代器,而不是所有迭代器都支持它。