如果不允许重新分配,此成员函数在标准(仅限备注)中没有定义的效果,将有有限的用途。但我在标准中找到的唯一适用的段落是23.2.1/11:
除非另有规定(显式地或以其他函数定义函数),否则调用容器成员函数或将容器作为参数传递给库函数,不应使迭代器失效或更改容器内对象的值。
既然重新分配会使迭代器失效,这是否意味着shrink_to_fit无法正式重新分配?如果是这样的话,该函数只能对那些不重新分配能力的实现(如果有.
发布于 2012-12-17 11:14:58
我同意,其意图显然是shrink_to_fit()可以重新分配,因此应该允许它使迭代器失效。
只有当实现为分配器提供了一个realloc()-like功能,保证在缩小块时不移动内存,而这不会使迭代器失效时,才有可能满足请求。但我不认为这正是最近增加的要求的意图,正如最近增加的要求所暗示的,T是向量中的MoveInsertable,因为只有当元素被移动到新的位置时,这一要求才有意义,这将使迭代器失效。
我认为您应该通过提交问题来澄清shrink_to_fit()可以使迭代器失效。这个问题将适用于basic_string、deque和vector。
https://stackoverflow.com/questions/13912507
复制相似问题