C++中list的erase()函数问题
来源:互联网 发布:香港阿里云 淘宝 编辑:程序博客网 时间:2024/04/29 04:08
erase的作用是,使作为参数的迭代器失效,并返回指向该迭代器下一参数的迭代器。
1)典型错误
using namespace std;int main(){ std::listtest_list; std::list::iterator test_list_it; test_list.push_back(1); test_list_it = test_list.begin(); for(;test_list_it != test_list.end();test_list_it++) { test_list.erase(test_list_it); }}
问题:该程序不能跳出循环
原因:test_list.erase(test_list_it);每次做erase时都有可能使迭代器失效,test_list_it++就发生错误了。可以参见effective stl一书。所有容器做erase操作时都有可能使迭代器失效。
2)改正的原理是使当前迭代器失效时能指向下一个位置,具体的实现方法有三种。
例子
#include<iostream>#include<list>using namespace std;int main(){int i;list<int> list1;list<int> ::iterator it;for(i = 0; i < 8; i++)list1.push_back(i);for(it = list1.begin(); it != list1.end(); ++ it){cout <<*it<<" ";}cout<<endl;/*//写法一for(it=list1.begin(); it!= list1.end(); )if (*it % 2){list1.erase(it++);}elseit++;//写法二for(it=list1.begin();it!=list1.end();){if(*it%2)it=list1.erase(it);else it++;}*///写法三for(it=list1.begin();it!=list1.end();){if(*it%2){list<int>::iterator tmp=it++;list1.erase(tmp);}elseit++;}for (it = list1.begin(); it != list1.end(); ++ it){cout <<*it<<" ";}cout<<endl;return 1;}
0 0
- C++中list的erase()函数问题
- 关于STL中list的erase()函数
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- C++ list中erase和remove函数的用法
- C++ list中insert、erase和remove函数的用法
- C++primer学习-list中的erase函数
- STL的list的erase问题
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- STL中list的erase()方法
- STL中list的erase()方法
- 基于C++ list中erase与remove函数的使用详解
- STL中的erase函数的问题
- list的erase
- C++中string erase函数的使用
- DOM4J介绍与代码示例
- (转)CoreData教程
- iOS 各种网络编程面试总结
- Android Launcher开发(四)Launcher概述及简单添加和删除应用程序的快捷方式
- 系统系统!!!
- C++中list的erase()函数问题
- 1、任意输入一个4位正整数,调用函数(函数自定义)输出该正整数数的各位数 字组成的最大数。
- HTML5移动开发之路(10)——HTML5中的全局属性
- Android Launcher开发(五)添加应用程序桌面快捷方常见问题及解决方案
- C# md5加密方法
- 实验一:VC编程工具的灵活使用
- 杭电1575 Tr A(矩阵快速幂)
- XStream 注解处理xml
- 轻松搞定面试中的链表题目