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

Din*_*gle 9 c++ iterator stl

我看到它提到的某个地方:

for ( itr = files.begin(); itr < files.end(); ++itr )  // WRONG
for ( itr = files.begin(); itr != files.end(); ++itr ) // ok
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*igt 21

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


Bri*_*eal 7

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


Chr*_*odd 5

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