的 3 参数形式list::splice()
将单个元素从一个列表移动到另一个列表。 SGI 的文档明确指出所有迭代器,包括指向被移动元素的迭代器仍然有效。 Roguewave 的文档没有说明splice()
方法的迭代器失效属性,而 C++ 标准明确声明它使所有迭代器和对被拼接元素的引用失效。
splicing() 在实践中按照 SGI 的定义工作,但在微软 STL 实现的调试/安全 SCL 版本(严格遵循标准的字母)中出现断言失败(取消引用无效迭代器)。
现在,我使用 list 正是因为我想在列表之间移动一个元素,同时保留指向它的迭代器的有效性。该标准对原始 SGI 的规范进行了极其无益的更改。
我该如何解决这个问题?或者我应该务实一点,把头埋在沙子里(因为在实践中拼接不会使迭代器失效——即使在 MS 的实现中,一旦迭代器调试被关闭)。