C++ 标准模板库实现list循环删除操作
来源:互联网 发布:婚纱照相册制作软件 编辑:程序博客网 时间:2024/05/16 10:41
在用iterator遍历整个list时,iterator相当于链表中的当前结点指针,如果我们在循环体中遍历整个list, 并且对满足一定条件的元素进行删除操作,一定要先保存当前要删除结点的下一个结点的iterator,否则删除完元素的下一次循环体会因为指针丢失而报错。
#include<iostream>
#include<string>#include<list>
#include<algorithm>
using namespace std;
class student
{
public:
int id;
string name;
student(int m,string n):id(m),name(n){}
};
void show(const student & stu)
{
cout<<"id= "<<stu.id<<" name= "<<stu.name<<endl;
}
int main()
{
student s1(1,"lisi");
student s2(2,"zhangsan");
student s3(3,"wangwu");
student s4(4,"lisi");
student s5(5,"lisi");
list<student> st;
st.push_back(s1);
st.push_back(s2);
st.push_back(s3);
st.push_back(s4);
st.push_back(s5);
for_each(st.begin(),st.end(),show);
cout<<endl;
list<student>::iterator lta;
list<student>::iterator ltc;
for(lta=st.begin();lta!=st.end();)
{
if(lta->name == "lisi")
{
if(lta==st.begin())//如果要删除的结点为头结点,先保存lta,再删除,避免指针悬空
{
ltc=lta;
lta++;
st.erase(ltc);
continue ;
}
ltc=lta; //如果要删除的结点为其它结点,先保存lta,再删除,避免指针悬空
--lta; //防止越界
st.erase(ltc);
}
lta++;
}
for(list<student>::iterator ltb=st.begin();ltb!=st.end();ltb++)
{
cout<<"id= "<<ltb->id<<" name= "<<ltb->name<<endl;
}
//for_each(st.begin(),st.end(),show);cin.get();
return 0;
}
也可以通过计数的方式循环删除相同的数据
int main4()
{
student s1(1,"lisi");
student s2(2,"zhangsan");
student s3(3,"wangwu");
student s4(4,"lisi");
student s5(5,"lisi");
int i=0,n=0;
list<student> st;
st.push_back(s1);
st.push_back(s2);
st.push_back(s3);
st.push_back(s4);
st.push_back(s5);
for(list<student>::iterator lt=st.begin();lt!=st.end();lt++)
{
n++;
cout<<"id= "<<lt->id<<" name= "<<lt->name<<endl;
}
while(i<n)
{
list<student>::iterator lta;
for(lta=st.begin();lta!=st.end();++lta)
{
if(lta->name == "lisi")
{
st.erase(lta);
break;
}
}
i++;
}
for(list<student>::iterator ltb=st.begin();ltb!=st.end();ltb++)
{
cout<<"id= "<<ltb->id<<" name= "<<ltb->name<<endl;
}
cin.get();
return 0;
}
- C++ 标准模板库实现list循环删除操作
- 标准模板库----list
- c++ 标准模板库 List
- 标准模板库list总结
- 标准模板库(list)
- c++::用模板实现List
- 探讨c++标准模板库中的List
- (Zz)STL 简介,标准模板库(list)
- STL]标准模板库(STL)List
- STL标准模板库 list的使用
- STL 简介,标准模板库 list
- 标准模板库STL之list
- C++:标准模板库(STL)
- C++:标准模板库vector
- C++:标准模板库map
- C++:标准模板库string
- C++:标准模板库Sort
- C++STL标准模板库
- c++字符串转换字符指针
- MyBatis多表关系查询时的注意事项
- 读完论文要回答的问题
- parenthesis 括号匹配 (区间dp)
- css笔记
- C++ 标准模板库实现list循环删除操作
- 安卓学习笔记汇总
- Codeforces 876 C Classroom Watch 基础数学,暴力
- POJ2299 树状数组求逆序数
- BZOJ1115(洛谷P3480)[POI2009]KAM-Pebbles
- AI大事件 | 李飞飞接受访谈, TensorFlow: 发布 1.4.0,深度强化学习Bootcamp-视频讲座&实验
- ubifs分区挂载及信息查看
- 吴恩达新公司招实习生:不限专业,但没学过我的Coursera课程我不要
- nslookup