DEBUG C++ ——迭代器iterator的误用

来源:互联网 发布:备份软件购买 编辑:程序博客网 时间:2024/04/28 15:09

问题:已知一组数据,删除ilist的所有奇数元素。

关键代码:(C++ Primer 第三版给出答案如下)

 for(iter=ilist.begin();iter!=ilist.end();++iter) {   if(*iter%2==1)    ilist.erase(iter); }

这个程序是有严重问题的,当遇到一个奇数元素时,就会调用 ilist.erase(iter);,这个时候每删除一次,列表的大小都会改变。而程序根本就没有考虑这个问题,所以我引入了一个过渡列表ilist1.

#include<iostream>#include<list>using namespace std;

int main(){ int ia[]={0,1,1,2,3,5,8,13,21,55,89};//已知一组数据 list<int> ilist(ia,ia+11); list<int> ilist1; //for(int i=0;i<11;++i) //ilist.push_back(ia[i]);  list<int>::iterator iter; list<int>::iterator iter1;   for(iter=ilist.begin();iter!=ilist.end();++iter) {   if(*iter%2==1)

      ilist.erase(iter);//试图删除奇数元素,结果为:Error!!

     ilist1.push_back(*iter);//引入一个过渡list。  } ilist.erase(ilist.begin(),ilist.end());//ilist.begin(),ilist.end() for(iter1=ilist1.begin();iter1!=ilist1.end();++iter1)  {   ilist.push_back(*iter1);  } //list<int> ilist3(ilist1.begin(),ilist1.end()); cout<<"{"; for(iter=ilist.begin();iter!=ilist.end();++iter)    cout<<*iter<<","; cout<<"}/n"; return 0; }

容器的迭代器好用,但一定要注意使用方式。不要不考虑后果

原创粉丝点击