微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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、 结束,然后撕裂。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。