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;
}
容器的迭代器好用,但一定要注意使用方式。不要不考虑后果
关键代码:(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;
}
容器的迭代器好用,但一定要注意使用方式。不要不考虑后果
相关文章推荐
- C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- c++ iterator(迭代器)分类及其使用
- c++学习笔记--C++Primer第4版--迭代器iterator
- C++ - 正则表达式(regex) 迭代器(iterator) 的 详解 及 代码
- 初识迭代器 C++ Iterator
- C++ 迭代器(iterator)
- c++中iterator迭代器和vector容器
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- 设计模式C++描述----20.迭代器(Iterator)模式
- 迭代器容器C++标准模板库 迭代器 iterator 详解(二)
- c++ iterator(迭代器)分类及其使用
- C++之迭代器(iterator)与集合(vector)
- C++ 迭代器Iterator的分类
- C++之iterator(迭代器)学习
- c/c++:一个带迭代器的链表模板 iterator
- c++ iterator(迭代器)分类及其使用
- 【C++ STL应用与实现】19: 迭代器特性-iterator traits
- C++ STL(24):Stream Iterator,reverse_iterator,raw_storage_iterator(迭代器)
- C++标准模板库 迭代器 iterator 详解(二)
- c++ 模板参数做容器参数迭代器报错 vector<T>::const_iterator,typename const报错