重新分配将使所有的引用、指针和迭代器无效
指序列中的元素。这是可以保证的
重新分配发生在调用后发生的插入期间
的大小直到插入时为止
向量# EYZ0。< / p >
所以在c++ 03中,它不是“unless the new container size is greater than the previous capacity (in which case all iterators and references are invalidated)”,而应该是“greater than the size specified in the most recent call to reserve()”。这是c++ 03与c++ 11的一个不同之处。在c++ 03中,一旦insert()导致vector的大小达到前面reserve()调用中指定的值(很可能比当前的capacity()更小,因为reserve()可能导致比要求的更大的capacity()),任何后续的insert()都可能导致重新分配并使所有迭代器和引用无效。在c++ 11中,这种情况不会发生,并且您始终可以相信capacity()可以确定地知道,在size超过capacity()之前,下一次重新分配不会发生。
All Associative Containers: insert和emplace成员不应影响迭代器和容器引用的有效性[26.2.6/9]
无序关联容器
All Unordered Associative Containers:重散列使迭代器无效,改变元素之间的顺序,改变元素出现在哪个桶中,但不会使指向元素的指针或引用无效。[26.2.7/9] insert和emplace成员不影响容器元素引用的有效性,但可以使容器的所有迭代器失效。[26.2.7/14] insert和emplace成员不应该影响迭代器的有效性,如果(N+n) <= z * B,其中N是插入操作之前容器中的元素数量,n是插入的元素数量,B是容器的桶数,z是容器的最大装载系数。(26.2.7/15) < / p >
All Unordered Associative Containers:在合并操作的情况下(例如,a.merge(a2)),指向转移元素的迭代器和所有指向a的迭代器将无效,但指向留在a2中的元素的迭代器将仍然有效。(表91 -无序关联容器需求)