问题描述
根据cppref,std::vector::resize
明确保证:
当调整到更小的尺寸时,矢量容量永远不会减少,因为
这将使所有迭代器无效,而不仅仅是那些
将被等效的 pop_back()
调用序列无效。
但是,我无法从 std::string::resize
的 documentation 中找到任何类似的保证。
是否 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、 结束,然后撕裂。