[英]std::list<>::splice invalidates iterators. Rationale?
我想知道使std::list<>::splice
使参与拼接到新容器的子序列的迭代器无效的原因是什么。 这看起来有点不合逻辑,特别是考虑到标准的std::container::swap
规范。 根据语言标准, std::container::swap
不会使任何迭代器无效。 这是一个非常合理的实用规范。 但是,我会说std::list<>::splice
也会从迭代器保留行为中受益匪浅。
我理解可能存在一些基于迭代器可达性等概念的纯学术考虑因素。但同时splice
是一个std::list
-specific操作,这意味着为它提供一个定制的规范可能不会一般来说,对STL设计造成严重的概念性损害。
那是什么? 它是否会使std::list
一些实际实现失效或过于复杂,我无法识别?
在C ++ 11中, splice
不会使迭代器无效,而是使它们引用*this
容器中的相应元素。 这一切都在23.3.5.5中描述。
如果容器有自定义的, 不相等(不兼容)的分配器 ,你就无法交换指针,你别无选择,只能真正复制元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.