11

std::list<>::splice我想知道使引用被拼接到新容器中的子序列的迭代器无效背后的基本原理是什么。这对我来说看起来有点不合逻辑,尤其是在标准std::container::swap规范的情况下。根据语言标准std::container::swap ,不会使任何迭代器失效。这是一个完全合理的实用规范。但是,我想说这std::list<>::splice也将从保留迭代器的行为中受益匪浅。

我知道基于迭代器可达性等概念可能存在一些纯粹的学术考虑。但同时splice是一个std::list特定的操作,这意味着为其提供定制的规范可能不会对一般的 STL 设计。

那是什么?std::list它是否会取缔或使某些我无法识别的实际实现变得过于复杂?

4

2 回答 2

8

在 C++11splice中不会使迭代器无效,而是让它们引用*this容器中的适当元素。这在 23.3.5.5 中都有描述。

于 2012-07-05T21:29:40.920 回答
4

如果容器具有自定义的、不相等(不兼容)的分配器,则您无法交换指针,您别无选择,只能真正复制元素。

于 2012-08-11T00:42:00.340 回答