std::list<int> myList;
std::list<int> myIter = myList.begin();
Итератор имеет такое же значение, как если бы вы его инициализации с myList.end()
. Итератор инициализируется положением «взад-вперед». Даже после того, как вы вставляете элемент в список, итератор все еще указывает один на один конец. Если вы увеличиваете его, вы вызываете неопределенное поведение.
UPDATE:
Например, если вы собираете свой фрагмент кода с GCC с -D_GLIBCXX_DEBUG, полученный исполняемый прервет:
/usr/include/c++/4.6/debug/safe_iterator.h:236:error: attempt to increment
a past-the-end iterator.
Objects involved in the operation:
iterator "this" @ 0x0x7fffc9548fb0 {
type = N11__gnu_debug14_Safe_iteratorINSt9__cxx199814_List_iteratorIiEENSt7__debug4listIiSaIiEEEEE (mutable iterator);
state = past-the-end;
references sequence with type `NSt7__debug4listIiSaIiEEE' @ 0x0x7fffc9548fb0
}
zsh: abort (core dumped) ./listiter
Я думаю, что это хороший вопрос, потому что это заставило меня думать, хм, на самом деле. Это список ... может быть, это сработает ... (Конечно, это не так) – jcoder