Я читал книгу Стэнли Липпмана "С++ Primer", чтобы узнать больше о С++ 11.
В главе "Общие алгоритмы" он упоминает, что итераторы, используемые в общих алгоритмах, можно разделить на 5 типов на основе поддерживаемых ими операций: итераторы ввода, итераторы вывода, итераторы пересылки, двунаправленные итераторы и итераторы произвольного доступа.
Цитата из его книги:
Итераторы ввода могут считывать элементы в последовательности. Они должны обеспечить следующие операторы - равенство (
==
), неравенство (!=
), разыменование (*
), postfix&
приращение префикса (++
) и оператор стрелки (->
). вход итераторы могут использоваться только последовательно. Мы гарантируем, что*it++
действителен, но приращение ввода-итератора может привести к аннулированию всех других итераторов в этом потоке. В результате нет никакой гарантии, что мы можем сохранить состояние входного итератора и исследовать элемент через этот сохраненный итератор
Мне трудно понять цитату жирным шрифтом. Почему приращение итератора ввода, предназначенного только для чтения элементов, делает недействительными другие итераторы? Почему мы не можем сохранить состояние ввода-итератора?