如何解决std::string::resize(smaller_than_capacity) 是否保证现有迭代器仍然有效?
根据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、 结束,然后撕裂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。