splice () при аннулировании std :: list и итератора
Форма с тремя аргументамиlist::splice()
перемещает один элемент из одного списка в другой.Документация SGI прямо заявляет, что все итераторы,включая тот, который указывает на перемещаемый элемент оставаться в силе.Документация Roguewave ничего не говорит о свойствах аннулирования итераторовsplice()
методы, в то время как стандарт C ++ явно заявляет, что он делает недействительными все итераторы и ссылки на склеиваемый элемент.
splicing () на практике работает как определено SGI, но я получаю ошибку подтверждения (разыменование неверного итератора) в отладочных / защищенных версиях SCL реализации STL от Microsoft (что строго следует букве стандарта).
Теперь я использую список именно потому, что хочу переместить элемент между списками, сохраняя при этом действительность итератора, указывающего на него. Стандарт внес крайне бесполезные изменения в первоначальную спецификацию SGI.
Как я могу обойти эту проблему? Или я должен просто быть прагматичным и сунуть голову в песок (потому что сплайсинг делаетне аннулировать итераторы на практике - даже в реализации MS, если отладка итератора отключена).