本文主要是介绍DEBUG C++ ——迭代器iterator的误用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:已知一组数据,删除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; }
容器的迭代器好用,但一定要注意使用方式。不要不考虑后果
这篇关于DEBUG C++ ——迭代器iterator的误用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!