关于迭代器失效的疑惑
int ia[]={0,1,1,2,3,5,8,13,21,55,89}; vector<int> ivec(ia,ia+11); list<int> ilist(ia,ia+11); for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter) { if(*iter%2==0) { iter=ivec.erase(iter); --iter; //VS2010加上这句就出错 } } for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter) { if(*iter%2!=0) { iter=ilist.erase(iter); --iter; //这里可以理解,往前移动一个元素,for循环之后++iter就指向被删除元素后面那个元素了 } } for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();/*++iter*/) { if(*iter%2==0) { iter=ivec.erase(iter); //--iter; //VS2010加上这句就出错 } else { ++iter; }}
[解决办法]
if(*iter%2==0) { iter=ivec.erase(iter); --iter; //VS2010加上这句就出错 }
[解决办法]
An iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the vector if no such element exists.
你删除第一个元素的时候,返回的指针指向了begin,你再减就没有地方退了。
[解决办法]