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

时间:2012-12-17 10:38:55

标签: c++ c++11 std

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

  

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

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

1 个答案:

答案 0 :(得分:7)

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

如果实现为分配器提供了类似realloc()的功能,并且在收缩块时保证不移动内存,这将不会使请求失效,这不会使迭代器失效。但是我不相信那是recently-added requirement T MoveInsertable所暗示的向量,因为该要求仅在元素移动到新位置时才有意义,这将使迭代器无效。

我认为你应该submit an issue澄清shrink_to_fit()可以使迭代器无效。该问题适用于basic_stringdequevector