Итератор C++ в для ловушек цикла?

Я вижу где-нибудь, что это упоминает:

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

Почему первое выражение неправильно? Я всегда использовал первое выражение и не имел никаких проблем.

9
задан Dingle 24 May 2011 в 18:03
поделиться

3 ответа

Сравнение порядка, например <, > , <= , > = , будет работать для итераторы с произвольным доступом, но многие другие итераторы (например, двунаправленные итераторы в связанных списках) поддерживают только проверку на равенство ( == и ! = ). Используя ! = , вы можете позже заменить контейнер без необходимости изменять столько же кода, и это особенно важно для кода шаблона, который должен работать со многими различными типами контейнеров.

21
ответ дан 4 December 2019 в 06:55
поделиться

Существуют разные типы итераторов. Только итераторы с произвольным доступом поддерживают оператор <. Другие типы итераторов (двунаправленные, входные, выходные и прямые) этого не делают. Но все итераторы поддерживают операторы == и ! = . Поэтому ваш код будет работать со всеми типами итераторов, если вы используете ! = .

7
ответ дан 4 December 2019 в 06:55
поделиться

Первый работает только для итераторов, которые поддерживают operator <, что не все итераторы поддерживают.

5
ответ дан 4 December 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: