STL序列式容器中删除元素的方法和陷阱

STL序列式容器中删除元素的方法和陷阱

ID:37903588

大小:145.00 KB

页数:18页

时间:2019-06-02

STL序列式容器中删除元素的方法和陷阱_第1页
STL序列式容器中删除元素的方法和陷阱_第2页
STL序列式容器中删除元素的方法和陷阱_第3页
STL序列式容器中删除元素的方法和陷阱_第4页
STL序列式容器中删除元素的方法和陷阱_第5页
资源描述:

《STL序列式容器中删除元素的方法和陷阱》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、STL序列式容器中删除元素的方法和陷阱在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题,其它如queue、stack等配接器容器(containeradapter),由于它们有专属的操作行为,没有迭代器(iterator),不能采用本文介绍的删除方法,至于deque,它与vector的删除方法一样。ST

2、L容器功能强大,butnosiliverbullet,如果你使用不当,也将让你吃尽苦头。1.for循环代码删除STL序列式容器中元素的方法例如,你能看出以下代码有什么问题?例1:#include#includeusingnamespacestd;voidmain(){vectorvectInt;inti;//初始化vector容器for(i=0;i<5;i++){vectInt.push_back(i);}//以下代码是要删除所有值为4的元素vector::iteratoritVect=vectInt.b

3、egin();for(;itVect!=vectInt.end();++itVect){if(*itVect==4){vectInt.erase(itVect);}}intiSize=vectInt.size();for(i=0;i#includeusingnamespacestd;voidmain(){vectorvectInt;inti;//初始化vector容器for(i=0;i<5;i

4、++){vectInt.push_back(i);if(3==i){//使3的元素有两个,并且相临。这非常关键,否则将发现不了bug。//具体解释见下。vectInt.push_back(i);}}vector::iteratoritVect=vectInt.begin();vector::iteratoritVectEnd=vectInt.end();//防止for多重计算//以下代码是要删除所有值为3的元素for(;itVect!=itVectEnd;++itVect){if(*itVect==3){itVect=vectInt.era

5、se(itVect);}}intiSize=vectInt.size();for(i=0;i#includeusingnamespacestd;voidmain(){vectorvectInt(5);inti;vectInt[0]=0;vectInt[1]=1;vectInt[2]=2;vectInt[3]=3;vectInt[4]=4;//替换为vectInt[4]=3;试试vector

6、t>::iteratoritVect=vectInt.begin();vector::iteratoritVectEnd=vectInt.end();//防止for多重计算//以下代码是要删除所有值为3的元素for(;itVect!=itVectEnd;){if(*itVect==3){itVect=vectInt.erase(itVect);}else{++itVect;}}intiSize=vectInt.size();for(i=0;i

7、里最重要的是要理解erase成员函数,它删除了itVect迭代器指向的元素,并且返回要被删除的itVect之后的迭代器。迭代器相当于一个智能指针,指向容器中的元素,现在删除了这个元素,将导致内存重新分配,相应指向这个元素的迭代器之后的迭代器就失效了,但erase成员函数返回要被删除的itVect之后的迭代器。例1将导致程序未定义的错误,在windows中即是访问非法内存,程序当掉。因为vectInt.erase(itVect);调用后itVect之后的迭代器已无效了,所以当执行++itVect后,*itVect访问了非法内存。例1也是初学者最容易犯的错误,这个

8、错误也比较容易发现。例2可能会导致不能

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。