Проблемы с вашей реализацией абсолютно не связаны со свойствами insert_iterator
. Все виды итераторов вставки в стандартной библиотеке C ++ гарантированно остаются действительными, даже если вы выполняете вставку в контейнер, который потенциально делает недействительными итераторы при вставке. Это, конечно, верно, только если все вставки выполняются только через итератор вставки.
Другими словами, реализация итераторов вставки гарантирует, что итератор автоматически "исцелит" себя, даже если вставка приведет к потенциально аннулирующему итератору событию в контейнере.
Проблема с вашим кодом заключается в том, что итераторы begin
и end
могут потенциально стать недействительными при вставке в определенные типы контейнеров. Вам нужно беспокоиться о begin
и end
в вашем коде, а не об итераторе вставки.
Между тем, по какой-то причине вы делаете это полностью назад. Кажется, вы заботитесь об обновлении итератора вставки (который совершенно не нужен), при этом полностью игнорируя begin
и end
.