我想知道让std::list<>::splice来使引用拼接到新容器中的子序列的迭代器无效的基本原理是什么。这在我看来有点不合逻辑,特别是在标准std::container::swap规范的基础上。根据语言标准,std::container::swap不会使任何迭代器无效。这是一个非常合理的实用规范。然而,我想说的是,std::list<>::splice也会从迭代器保留行为中获益良多。
我知道基于迭代器可达性等概念可能会有一些纯粹的学术考虑,但同时splice是一个std::list-specific操作,这意味着为它提供定制的规范通常不会对splice设计造成严重的概念性破坏。
那是什么呢?它会不会使我无法识别的std::list的一些实际实现变得非法或过于复杂?
发布于 2012-07-06 05:29:41
在C++11中,splice不会使迭代器无效,但会使它们引用*this容器中的相应元素。在23.3.5.5中对此进行了描述。
发布于 2012-08-11 08:42:00
如果容器有定制的,不相等的(非兼容的)分配器,你不能交换指针,你别无选择,只能真正的复制元素。
https://stackoverflow.com/questions/11352742
复制相似问题