繁体   English   中英

std :: list <> :: splice使迭代器无效。什么道理呢?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM