push_back会不会使迭代器失灵

push_back会不会使迭代器失效?
我只知道插入可能会使迭代器失效,但是今天突然看到push_back(),这函数不会也使迭代器失效吧,网上看了看,说是会使end()失效,难道真是这样?那这迭代器也太恶心了吧
容器 迭代器

------解决方案--------------------
容器是什么,vector 吗?
那 push_back 可能会是迭代器失效,因为 push_back 就是 insert(end,...);
------解决方案--------------------
你到底要干吗,end() 从来就不应该 ++ 的,无论你是否 push_back.
------解决方案--------------------
引用:
Quote: 引用:

容器是什么,vector 吗?
那 push_back 可能会是迭代器失效,因为 push_back 就是 insert(end,...);
那我push_back()之后,end()++应该就可以了吧?


不可以的!好像没有这种操作的吧!

不管是插入 添加 还是删除,这个时候的你迭代器就已经坏了的!失效了
------解决方案--------------------
为啥要重新申请一个新的?
把原来那个再赋值一次就可以。
it = xx.end() 
------解决方案--------------------
还是重新定义一个吧。
------解决方案--------------------
不需要重新定义,重新调用下end()即可。
------解决方案--------------------
vector,push_back()后元素就多了一个,如果因此造成重新分配内存,并且造成数据搬迁
那么所有 vector的itertor,无论如何都会失效,只有从头开始才行。

如果没有重新分配内存---上次分配的容量足够,只要改变一下元素个数就好,----,或者虽然重新分配内存,地址不变,只是增加分配的内存数量,那么如果从效果上说,所有itertor都没有失效,但是因为vector元素数量发生变化,理论上itertor应该是失效的,并且 原来那个end(),已经不是实际的 vector的新的end()了。

数据有没有,重新分配,对使用vector代码的人来说是透明的,虽然可以通过其他方式知道;

但是从封装性来考虑,还是一律判定失效,比较合适。

不然会造成代码的不一致性和额外的复杂性。

------解决方案--------------------

/*
当前容量: .capacity()
约定容量: .reserve(n)
下标[]: .operator[](i)不检查越界, .at(i)越界抛出异常
*/
#include <iostream>
using namespace std;
#include <vector>
#include "print.h"
#include <exception>
#include <typeinfo>

int main()
{
vector<double> vd;
for(int i=0; i<9; i++){
vd.push_back(i+0.1);
cout << &*vd.begin() << ':';