在线等待求解
删除ilist里面的奇数位置的元素,应该输出{0,1,3,8,21,89}
下面的程序有问题,问题出在哪里?
在就是list容器为什么不能用for(list<int>::iterator iter=ilist.begin()+1;iter!=ilist.end();iter+=2)
谢谢!
- C/C++ code
#include<iostream>#include<list>#include<cstdlib>using namespace std;int main(){ int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 }; list<int> ilist( ia, ia+11 ); int i=0; for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();iter++) { if(i%2) ilist.erase(iter); i++; } for(list<int>::iterator iter1=ilist.begin();iter1!=ilist.end();iter1++) { cout<<*iter1<<" " ; } cout<<endl; system("pause"); return 0;}[解决办法]
- C/C++ code
using namespace std;int main(){ int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 }; list<int> ilist( ia, ia+11 ); int i=0; for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();i++) { if(i%2) ilist.erase(iter++); else iter++; } for(list<int>::iterator iter1=ilist.begin();iter1!=ilist.end();iter1++) { cout<<*iter1<<" " ; } cout<<endl; system("pause"); return 0;}
[解决办法]
for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();iter++)
{
if(i%2)
ilist.erase(iter);//这里你把游标删除了,所以ilist.end()也变了。。这段代码会崩掉的
i++;
}
你可以再建一个list。存偶数个,把原来的list删除就好了。。