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