11

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

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

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

4

1 回答 1

9

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

如果实现realloc()为分配器提供了类似 - 的功能,保证在缩小块时不会移动内存,则只有可能满足请求,这不会使迭代器无效。但我不相信这是预期的,正如最近添加到向量中的要求所暗示T的那样MoveInsertable,因为该要求仅在元素移动到新位置时才相关,这将使迭代器无效。

我认为您应该提交一个问题以澄清shrink_to_fit()可能使迭代器无效的问题。该问题将适用于basic_string和。dequevector

于 2012-12-17T11:14:58.233 回答