splice () auf std :: list und Iterator-Invalidierung

Die 3-Argument Form vonlist::splice() Verschiebt ein einzelnes Element von einer Liste in die andere.Dokumentation von SGI stellt ausdrücklich fest, dass alle Iteratoren,einschließlich desjenigen, der auf das zu verschiebende Element zeigt gültig bleiben.Roguewaves Dokumentation sagt nichts über die Eigenschaften der Iteratorinvalidierung vonsplice() Methoden, während der C ++ - Standard ausdrücklich angibt, dass er alle Iteratoren und Verweise auf das gespleißte Element ungültig macht.

splicing () funktioniert in der Praxis wie von SGI definiert, aber ich erhalte einen Assertionsfehler (Dereferenzierung eines ungültigen Iterators) in Debug- / Secure-SCL-Versionen der STL-Implementierung von Microsoft (die genau den Buchstaben des Standards befolgt).

Jetzt benutze ich list genau deshalb, weil ich ein Element zwischen Listen verschieben möchte, während die Gültigkeit des darauf zeigenden Iterators erhalten bleibt. Der Standard hat eine äußerst wenig hilfreiche Änderung der ursprünglichen SGI-Spezifikation vorgenommen.

Wie kann ich dieses Problem umgehen? Oder sollte ich einfach nur pragmatisch sein und meinen Kopf in den Sand stecken (weil das Spleißen es tut)?nicht Iteratoren in der Praxis für ungültig erklären - nicht einmal in der Implementierung der MS, wenn das Iterator-Debugging deaktiviert ist).

Antworten auf die Frage(3)

Ihre Antwort auf die Frage