首页 > 代码库 > STL list 的insert()和erase()
STL list 的insert()和erase()
list 类提供了insert(),erase()函数,它们分别增加和删除一个位于迭代器位置的元素。
1, insert()
iterator insert(iterator pos,const T &vaule);//在pos前插入vaule,返回新元素的迭代器,不影响现有迭代器。
#include<iostream>using namespace std;#include<list>int main(void){ int a[5]={1,2,3,4,5}; list<int> intList(a,a+5); list<int>::iterator iter,newIter; iter=intList.begin(); newIter=intList.insert(iter,0); cout<<"newIter指向:"<<*newIter<<endl; cout<<"iter指向:"<<*iter<<endl; getchar();}
运行结果:
在表的首元素插入数据元素0,newIter指向新插入的0,iter还是指向原来的1
2, erase()
void erase(iterator pos);//删除pos指向的元素,删除后pos指向未知
#include<iostream>using namespace std;#include<list>int main(void){ int a[5]={1,2,3,4,5}; list<int> intList(a,a+5); list<int>::iterator iter,newIter; iter=intList.begin(); intList.erase(iter); cout<<"iter指向:"<<*iter<<endl;//会报运行时错误 getchar();}
运行结果:
删除表的首元素,表少了一个元素,但是iter却指向了未知,这不是我们期望的!
故我们可以使用
erase(iter++) 代替 erase(iter)
erase(iter++)相当于把迭代器当前的值给erase的参数,同时又将迭代器iter指向下一个元素。
#include<iostream>using namespace std;#include<list>int main(void){ int a[5]={1,2,3,4,5}; list<int> intList(a,a+5); list<int>::iterator iter,newIter; iter=intList.begin(); intList.erase(iter++); cout<<"iter指向:"<<*iter<<endl;//会报运行时错误 getchar();}
运行结果:
3, insert()和erase()使用
/*原始数组: 1 2 3 4 5期望输出1:1 1 2 2 3 3 4 4 5 5期望输出2:3 3 4 4 5 5函数 doubleData()使用insert()实现数据元素重复函数 eraseSmallVaule()使用erase()实现删除比3小的数据元素函数 print()遍历list,输出list的信息*/#include<iostream>using namespace std;#include<list>template<typename T>void print( list<T> &alist);template<typename T>void doubleData(list<T> &alist);template<typename T>void eraseSmallVaule(list<T> &alist,T vaule);int main(void){ int a[5]={1,2,3,4,5}; list<int> intList(a,a+5); cout<<"原始list是:"; print(intList); doubleData(intList); cout<<"doubleData()后list是:"; print(intList); cout<<"删除比3小的元素后list是:"; eraseSmallVaule(intList,3); print(intList); getchar();}template<typename T>void print( list<T> &alist){ list<T>::iterator iter; iter=alist.begin(); while(iter!=alist.end()) { cout<<*iter<<" "; iter++; } cout<<endl;}template<typename T>void doubleData(list<T> &alist){ list<T>::iterator iter,newIter; iter=alist.begin(); while(iter!=alist.end()) { newIter=alist.insert(iter,*iter); iter++; }}template<typename T>void eraseSmallVaule(list<T> &alist,T vaule){ list<T>::iterator iter; iter=alist.begin(); while(iter!=alist.end()) { if(*iter<vaule) { alist.erase(iter++); } else iter++; }}
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。