c++ - std::list<>::splice 使迭代器无效。理由?

标签 c++ stl iterator invalidation

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

我知道可能有一些基于迭代器可达性等概念的纯学术考虑。但同时splicestd::list -特定操作,这意味着为其提供定制规范可能不会对一般的 STL 设计造成严重的概念性损害。

那是什么?它是否会使 std::list 的某些实际实现变得非法或过于复杂? ,我没认出来?

最佳答案

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

关于c++ - std::list<>::splice 使迭代器无效。理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352742/

相关文章:

用于 Mac OSX 的 C++ IDE/ANSI 编译器?

c++ - 具有自定义键类型的 STL 无序映射

python - 如何使用 Python 遍历 MySQL 表?

c++ - vector 迭代器 : no match for ‘operator=’

c++ - 循环中前进迭代器

c++ - 如何创建一个稀疏矩阵作为列表列表? (C++)

c++ - 编译使用 "Meschach"库的模块时从 STL 抛出的错误

c++ - 从CPP中的字符串中删除重复项

基于 C++ 非迭代器的范围库?

c++ - 设置和清除内存地址位