是否允许vector :: shrink_to_fit重新分配?

sou*_*lie 8 c++ std c++11

如果不允许重新分配,则该成员函数在标准(仅备注)中没有明确的效果,将限制使用.但我在标准中找到的唯一似乎适用的段落是23.2.1/11:

"除非另有说明(显式或通过根据其他函数定义函数),调用容器成员函数或将容器作为参数传递给库函数不应使迭代器无效或更改其中的对象的值.容器."

由于重新分配使迭代器无效,这是否意味着shrink_to_fit无法正式重新分配?如果是这样,该函数只能对减少容量不重新分配的实现有效,如果有的话......

Jon*_*ely 7

我同意,显然shrink_to_fit()可以重新分配,因此应该允许它使迭代器无效.

如果实现realloc()为分配器提供类似特性,并且在收缩块时保证不移动内存,这将不会使请求成为可能,这不会使迭代器无效.但我不认为这是什么意图,由所暗示最近添加的要求,T就是MoveInsertable到载体,因为如果元素被移动到新位置,这会使无效迭代器的要求仅仅是相关的.

我认为你应该提交一个问题来澄清它shrink_to_fit()可以使迭代器失效.该问题适用于basic_string,dequevector.