std::string::resize(smaller_than_capacity) 是否保证现有迭代器仍然有效?

问题描述

根据cpprefstd::vector::resize明确保证:

当调整到更小的尺寸时,矢量容量永远不会减少,因为 这将使所有迭代器无效,而不仅仅是那些 将被等效的 pop_back() 调用序列无效。

但是,我无法从 std::string::resizedocumentation 中找到任何类似的保证。

是否 std::string::resize(smaller_than_capacity) 保证现有迭代器仍然有效?

解决方法

标准中不存在此类要求。见 21.3.3.2:

引用一个元素的引用、指针和迭代器 basic_string 序列可能会因以下使用而失效 那个 basic_string 对象:

(4.1) 作为参数传递给任何 引用非常量的标准库函数 basic_string 作为参数。

(4.2) 调用非常量成员 函数,除了 operator[]、at、data、front、back、begin、rbegin、 结束,然后撕裂。