Я вижу где-нибудь, что это упоминает:
for ( itr = files.begin(); itr < files.end(); ++itr ) // WRONG
for ( itr = files.begin(); itr != files.end(); ++itr ) // ok
Почему первое выражение неправильно? Я всегда использовал первое выражение и не имел никаких проблем.
Сравнение порядка, например <
, >
, <=
, > =
, будет работать для итераторы с произвольным доступом, но многие другие итераторы (например, двунаправленные итераторы в связанных списках) поддерживают только проверку на равенство ( ==
и ! =
). Используя ! =
, вы можете позже заменить контейнер без необходимости изменять столько же кода, и это особенно важно для кода шаблона, который должен работать со многими различными типами контейнеров.
Существуют разные типы итераторов. Только итераторы с произвольным доступом поддерживают оператор <
. Другие типы итераторов (двунаправленные, входные, выходные и прямые) этого не делают. Но все итераторы поддерживают операторы ==
и ! =
. Поэтому ваш код будет работать со всеми типами итераторов, если вы используете ! =
.
Первый работает только для итераторов, которые поддерживают operator <
, что не все итераторы поддерживают.