我想知道使std::list<>::splice
使引用新子容器中的子序列的迭代器无效的原因是什么。这看起来有点不合逻辑,特别是在标准std::container::swap
规范的基础上。根据语言标准std::container::swap
不会使任何迭代器无效。这是一个非常合理的实用规范。但是,我会说std::list<>::splice
也会从保留迭代器的行为中受益匪浅。
我理解可能存在基于迭代器可达性等概念的纯粹学术考虑因素。但同时splice
是std::list
特定的操作,意味着提供自定义 - 它的定制规范可能不会对STL设计造成严重的概念上的损害。
那是什么?是否会使std::list
的一些实际实现失效或过于复杂,我无法识别?
答案 0 :(得分:8)
在C ++ 11中splice
不会使迭代器失效,而是让它们引用*this
容器中的相应元素。这一切都在23.3.5.5中描述。
答案 1 :(得分:4)
如果容器有自定义的不等(不兼容)分配器,你就无法交换指针,你别无选择,只能真正复制元素。