Я не могу уловить вашу проблему ... хорошо, давайте попробуем воспроизвести:
std::list<int> l;
std::list<int>::iterator it = l.begin();
На что указывает ваш итератор? До конца списка, поскольку список пуст!
§23.2.1 [container.requirements.general] p6
begin()
возвращает итератор, ссылающийся на первый элемент в контейнере. end()
возвращает итератор, который является последним значением для контейнера. Если контейнер пуст, то begin() == end()
;
l.push_back(0);
Теперь список содержит один элемент. Ваш итератор действителен, так как список не сделал недействительным итератор и все еще указывает на конец списка.
l.insert(it, 1);
Теперь вы вставляете 1
перед итератором, который указывает на конец. Итак, ваш первый элемент - 0
, а последний - 1
.
Итак, ваш вывод 01
, как и ожидалось.
Возможно, вы ожидаете, что begin()
доставит фиксированный виртуальный запуск контейнера итератора просто неверен?