为什么在使用reserve给vector重新分配大小之后,原来的迭代器没有失效

如题。
做了好多测试,发现在使用reserve手动给vector容器分配大小后,原来容器的迭代器,引用全部都没有失效

这我就不明白了,在使用insert时,导致内存重新分配时,迭代器会失效,而是用reserve却没有。
源码看的一脸懵逼,求教大神

https://blog.csdn.net/wangshubo1989/article/details/50334297

    vector<int> a = { 1,2,3 };
    a.reserve(10);
    vector<int>::iterator it = a.begin();
    a.reserve(1000);

    cout << (*it) << endl;
    it++;
    cout << *it << endl;

测试这段代码,使用reserve之后,原来的迭代器失效了,看第二个reserve

首先,vector是可以像vector a={1,2,3}这样赋值的,运行起来也没有问题
另外,我测试的时候,使用reserve之后迭代器是失效了的
reserve(count)会在当前capacity小于count并且max_size大于count的时候重新为vector分配空间
我猜你遇到的使用reserve之后迭代器没有失效,是在capacity很大,reserve的大小小于capacity的情况发生的

图片说明图片说明

图片说明

reserve
1.分配新的内存块,它有容器目前容量的倍数。在大部分实现中,vector和string的容量每次以2为因数增长。也就是说,当容器必须扩展时,它们的2.容量每次翻倍。
3.把所有元素从容器的旧内存拷贝到它的新内存。
4.销毁旧内存中的对象。
5.回收旧内存。
所有指向vector或string中的迭代器、指针和引用**都会失效**。这意味着简单地把一个元素插入vector或string的动作需要更新其他使用了指向vector或string中的迭代器、指针或引用的数据结构。
所以 ,**应该不存在从新分配后,迭代器的引用仍生效的情况**。