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; }
容器的迭代器好用,但一定要注意使用方式。不要不考虑后果
- DEBUG C++ ——迭代器iterator的误用
- 关于ArrayList和Iterator的一点误用的理解
- C++Primer——迭代器iterator
- Debug模式误用Opencv Release库的错误
- C语言陷阱---指针的误用
- Effective C++——》条款18:让接口容易被正确使用,不容易被误用
- C++Primer——迭代器iterator(1)
- Iterator——迭代器
- C语言的一些误用和知识总结
- C语言的一些误用和知识总结
- C语言的一些误用和知识总结
- C语言的一些误用和知识总结
- C++vector 迭代器iterator
- 【c++】迭代器iterator
- 随机数的产生——srand(time(0))的妙用和误用
- 内存优化的误用
- 误用的函数
- C++的memset误用
- 一山更有一山低
- 安装VC6要更新Java虚拟机?
- Web标准、SWFObject、Google
- Proteus6.9有以上版本与KEIL C的联调方法
- ServletContext使用
- DEBUG C++ ——迭代器iterator的误用
- Java之final
- S60 开发环境配置
- 多线程笔记1
- Excel宏_实现对动态数据求均值和落在特定范围的数据的个数
- 资源束相关应用方法集合
- 递归算法
- 忘记该忘记的
- 《C程序设计》_(第二版)_谭浩强著_P121_6.15题目解答