C++ primer 习题9.26 的问题。

原题略。

答案的问题在于   当一开始数组的第一个元素为0时,他为偶数,删除它后,迭代器指向第一个元素1 ,

错误在于下一句,--lit  使得迭代器指向begin的前一个,超出了范围,所以导致运行错误。

 

必须要了解for语句的实现,则可以解决这个问题。

#include<vector> #include<iostream> #include<list> using namespace std; int main() { int ia[]={0,1,1,2,3,5,8,13,21,55,89}; vector<int>c1(ia,ia+11); list<int>c2(ia,ia+11); vector<int>::iterator pos1; list<int>::iterator pos2; for(pos1=c1.begin();pos1!=c1.end();++pos1) { if((*pos1)%2==0) { pos1=c1.erase(pos1); if(pos1!=c1.begin()) pos1--; else continue; } } for(pos2=c2.begin();pos2!=c2.end();++pos2) { if((*pos2)%2!=0) { pos2=c2.erase(pos2); if(pos2!=c2.begin())--pos2; else continue; } } for(pos1=c1.begin();pos1!=c1.end();++pos1) { cout<<*pos1<<endl; } cout<<"list:"; for(pos2=c2.begin();pos2!=c2.end();++pos2) { cout<<*pos2<<endl; } return 0; }

 

我用了continue语句,则可以避免循环时要执行的++lit语句。

 

就此解决了这个问题。

你可能感兴趣的:(C++,c,list,iterator)