#include <iostream> #include <vector> #include <list> using namespace std; int main() { int ia[]={0,1,1,2,3,5,8,13,21,55,89}; vector<int> ivec(ia,ia+11); list<int> ilst(ia,ia+11); //删除ilst奇数元素 for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit) { if (*lit%2==1) { lit=ilst.erase(lit); if(lit==ilst.begin())//处理指向头的问题 continue; --lit; //迭代器回退,指向前一个元素 } } for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit) { cout<<*lit<<endl; } //删除vector容器中的偶元素 for (vector<int>::iterator vit=ivec.begin();vit!=ivec.end();++vit) { if (*vit%2==0) { vit=ivec.erase(vit); if(vit==ivec.begin())//处理指向头的问题 continue; --vit; } } for (vector<int>::iterator vit=ivec.begin();vit!=ivec.end();++vit) { cout<<*vit<<endl; } return 0; }
答案书上的哪个例子是错的,自己改了一下,回去一想,还是错的,重新又写了一个版本,下面的没有问题:
#include <iostream> #include <vector> #include <list> using namespace std; int main() { int ia[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89}; vector<int> ivec(ia, ia + 11); list<int> ilst(ia, ia + 11); list<int>::iterator lit = ilst.begin(); while(lit != ilst.end()) { if(*lit%2==1){ lit=ilst.erase(lit); } else { ++lit; } } for (list<int>::iterator lit = ilst.begin(); lit != ilst.end(); ++lit) { cout << *lit <<" "; } cout<<endl; vector<int>::iterator vit = ivec.begin(); while(vit != ivec.end()) { if(*vit%2==0){ vit=ivec.erase(vit); } else { ++vit; } } for (vector<int>::iterator vit = ivec.begin(); vit != ivec.end(); ++vit) { cout << *vit << " "; } cout<<endl; return 0; }