splice () na std :: list i unieważnienie iteratora
3-argumentowa formalist::splice()
przenosi pojedynczy element z jednej listy na drugą.Dokumentacja SGI wyraźnie stwierdza, że wszystkie iteratory,w tym ten wskazujący na przenoszony element zachowują ważność.Dokumentacja Roguewave nie mówi nic o właściwościach unieważniania iteratorasplice()
metody, podczas gdy standard C ++ wyraźnie stwierdza, że unieważnia wszystkie iteratory i odniesienia do łączonego elementu.
splicing () w praktyce działa zgodnie z definicją SGI, ale otrzymuję niepowodzenie asercji (dereferencjonowanie niepoprawnego iteratora) w wersjach debug / secure SCL implementacji STL microsoft (która ściśle przestrzega litery normy).
Teraz używam listy dokładnie dlatego, że chcę przenieść element między listami, zachowując ważność iteratora wskazującego na ten element. Standard dokonał niezwykle niepomyślnej zmiany w pierwotnej specyfikacji SGI.
Jak mogę obejść ten problem? A może powinienem być pragmatyczny i wbić głowę w piasek (bo tak się składanie unieważnij iteratory w praktyce - nawet w implementacji MS, gdy debugowanie iteratora jest wyłączone).