の 3 引数形式はlist::splice()
、1 つの要素を 1 つのリストから別のリストに移動します。 SGI のドキュメントには、移動中の要素を指すものを含め、すべての反復子が有効なままであると明示的に記載されています。 Roguewave のドキュメントには、メソッドのイテレータ無効化プロパティについては何も記載されていませんsplice()
が、C++ 標準では、すべてのイテレータと結合される要素への参照を無効にすることが明示的に述べられています。
splicing() は実際には SGI の定義どおりに動作しますが、Microsoft の STL 実装 (標準の文字に厳密に従う) のデバッグ / セキュア SCL バージョンでアサーション エラー (無効なイテレータの逆参照) が発生します。
今、リストを使用しているのは、それを指している反復子の有効性を維持しながら、リスト間で要素を移動したいからです。この標準は、元の SGI の仕様に対して非常に役に立たない変更を加えました。
この問題を回避するにはどうすればよいですか? または、実用的で頭を砂に突き刺す必要があります(スプライシングは実際にはイテレーターを無効にしないためです-イテレーターのデバッグがオフになると、MSの実装でもそうではありません)。