求教高手!一个关于erase调用越界的问题
原题是CPP第四版习题9.26的练习书上的答案是
int main(){int ia[]={0,1,1,2,3,5,8,13,21,34,55,89}; vector<int> ivec(ia,ia+11); list<int> ilst(ia,ia+11); for (vector<int>::iterator vit = ivec.begin();vit != ivec.end();++vit) {if ( *vit % 2==0){ vit=ivec.erase(vit); --vit; } } for (list<int>::iterator lit = ilst.begin();lit != ilst.end();++lit) {if ( *lit % 2!=0){ lit=ilst.erase(lit); --lit; } }int main(){int ia[]={0,1,1,2,3,5,8,13,21,34,55,89}; vector<int> ivec(ia,ia+11); list<int> ilst(ia,ia+11); for (vector<int>::iterator vit = ivec.begin();vit != ivec.end();++vit) {if ( *vit % 2==0){ vit=ivec.erase(vit); } } for (list<int>::iterator lit = ilst.begin();lit != ilst.end();++lit) {if ( *lit % 2!=0){ lit=--ilst.erase(lit); } }#include <iostream>#include <vector>#include <list>using namespace std;int main(){ int ia[]= { 0,1,1,2,3,5,8,13,21,34,55,89, }; vector<int> ivec(ia,ia+12); list<int> ilst(ia,ia+12); vector<int>::iterator vit = ivec.begin(); while(vit!=ivec.end()) { if ( (*vit)%2==0 ) { vit=ivec.erase(vit); } else { cout<<*vit<<" "; vit++; } } cout<<endl; list<int>::iterator lit = ilst.begin(); while(lit!=ilst.end()) { if ( (*lit)%2!=0 ) { lit=ilst.erase(lit); } else { cout<<*lit<<" "; lit++; } } cout<<endl;}