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

AnT*_*AnT 11 c++ iterator stl invalidation

我想知道使std::list<>::splice引用新子容器中的子序列的迭代器无效的原因是什么.这看起来有点不合逻辑,特别是在标准std::container::swap规格方面.根据语言标准std::container::swap 不会使任何迭代器无效.这是一个非常合理的实用规范.但是,我会说这std::list<>::splice也会从保留迭代器的行为中获益匪浅.

我理解可能存在基于迭代器可达性等概念的纯粹学术考虑.但同时splice也是一种std::list特定的操作,这意味着为它提供定制的规范可能不会对其造成严重的概念损害.一般的STL设计.

那是什么?它会使一些std::list我认识不到的实际实施变得非法或过于复杂吗?

Dav*_*eas 8

在C++ 11 splice中,不会使迭代器无效,而是让它们引用*this容器中的相应元素.这一切都在23.3.5.5中描述.