您的位置:首页 > 编程语言 > C语言/C++

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

2008-06-14 00:06 423 查看
问题:已知一组数据,删除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;
}

容器的迭代器好用,但一定要注意使用方式。不要不考虑后果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: