Недействительность C ++ и итератора

Итак, я прохожу через Accelerated C ++ и несколько не уверен в том, что итератор недействителен в C ++. Возможно, проблема заключается в том, что никогда не объясняется, как эти итераторы построены.

Вот один пример:

Вектор с {1,2,3}

Если мой итератор находится на {2} и Я вызываю удаление {2}, мой итератор недействителен. Зачем? В моей голове {3} смещен вниз, поэтому место в памяти, где было {2}, так что итератор все еще указывает на действительный элемент. Единственный способ, которым я мог бы считать это неправдой, - это если бы итераторы были созданы заранее для каждого элемента, и каждый итератор имел бы некоторый тип поля, содержащего адрес следующего элемента в этом контейнере.

Другой мой вопрос связан с таким утверждением, как «делает недействительными все другие итераторы». Эмм, когда я перебираю свой векторный контейнер, я использую один итератор. У всех этих элементов в векторе неявно есть свой собственный итератор, связанный с ними, или я что-то упустил?

5
задан Ilya 17 November 2010 в 16:25
поделиться