【发布时间】:2021-09-24 16:17:57
【问题描述】:
根据cppref,std::vector::resize明确保证:
当调整到更小的尺寸时,矢量容量永远不会减少,因为 这将使所有迭代器无效,而不仅仅是那些 将被等效的
pop_back()调用序列无效。
但是,我在documentation 的std::string::resize 中找不到任何类似的保证。
是否std::string::resize(smaller_than_capacity)保证现有迭代器仍然有效?
【问题讨论】:
-
调整到小于当前的
capacity永远不会重新分配内存,这就是shrink_to_fit()的引入目的。但是,如果新的size小于当前的size,那么任何现有的迭代器>=旧的size都应该失效,因为它们现在将超过新的end。 -
有引用吗?
-
我不知道,但是这样的失效只是逻辑思维,因为没有迭代器可以在当前
end之后有效,所以如果end被移动,旧的迭代器应该变得无效,如果他们已经过了新的end。 -
@RemyLebeau 标准不保证。
-
一个字符串在调整较小时可能(可能)被移动到 SSO 区域,这会导致失效。
标签: c++ string vector standards c++20