c++中vector的iterator问题,srase()函数

代码如下,删除之后为什么报错

#include
#include
using namespace std;
int main(){
vector a;
vector::iterator t1, t2,t;
a.push_back(1);
a.push_back(2);
a.push_back(3);
t1 = a.begin(), t2 = a.end()-2;
while (t1 != t2){

    t = t1;
    if (*t1 == 1)
        a.erase(t);
    cout << "t1" << " ";
    t1++;
}
return 0;

}

有点难啊,我看看,过一会儿吧

我刚刚试了一下,如果在循环里面把加上t2 = a.end();就会出错,所以我觉得是删除元素之后,vector的end发生了变化,不再是原来的那个end了

是加上之后就不会出错

http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html

指针删除之后 会失效 操作一个被删除元素++ 会出问题
t = t1;
if (*t1 == 1)
t= a.erase(t);

map使用迭代器时删除了节点后要break,这是map设计的问题 http://blog.csdn.net/a29562268/article/details/54604572
参考map实现

先不说你的输出有问题,本来想输出t1指针,却输出了字符串“t1”。难道连vector都不需要给类型参数吗?删除首元素,肯定会导致原来的首迭代器失效。

实际上t和t1的地址 相同,你将t删除后,t1就变成一个野指针了,肯定会抛异常