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[]={,,,,};
list<int> intList(a,a+);
list<int>::iterator iter,newIter;
iter=intList.begin();
newIter=intList.insert(iter,);
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[]={,,,,};
list<int> intList(a,a+);
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[]={,,,,};
list<int> intList(a,a+);
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[]={,,,,};
list<int> intList(a,a+);
cout<<"原始list是:";
print(intList); doubleData(intList);
cout<<"doubleData()后list是:";
print(intList);
cout<<"删除比3小的元素后list是:";
eraseSmallVaule(intList,);
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++;
}
}
运行结果:

STL list 的insert()和erase()的更多相关文章
- 编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- insert erase和replace的例子
9.43 编写一个函数,接受三个string参数s.oldVal和newVal.使用迭代器及insert和erase函数将s中所有oldval替换为newVal.测试程序,用它替换通用的简写形式,如, ...
- STL:remove和erase区别
C++ STL中的remove和erase函数曾经让我迷惑,同样都是删除,两者有什么区别呢? vector中的remove的作用是将等于value的元素放到vector的尾部,但并不减少vector的 ...
- STL set 用法
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- C++ std::map::erase用法及其陷阱
1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...
- stl学习(三)crope的用法
转载自http://blog.csdn.net/iamzky/article/details/38348653 曾经我不会写平衡树……于是在STL中乱翻……学到了pb_ds库中的SXBK的斐波那契堆. ...
- STL标准库面试常考知识点
C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vecto ...
- C++ STL 迭代器失效问题
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我 ...
随机推荐
- 小白学Docker之Swarm
承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started 系列文章: 小白学Docker之基础篇 小白学Docker之Co ...
- CentOS7安装WDCP3
CentOS7安装WDCP3.2面板教程 到此WDCP安装完毕
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- POJ1743 Musical Theme [后缀自动机]
题意:不重叠最长重复子串 后缀数组做法:http://www.cnblogs.com/candy99/p/6227659.html 后缀自动机的话,首先|Right|>=2 然后min(t[u] ...
- 2018/1/28 RocketMq学习笔记
RocketMq是支持Topic模式的MQ中间件,它的传输格式为topic(主题,一个product对应一个主题,),Tag(标签,其实就是副标题,是为了更好的支持集群模式而出现的,这样客户端可以指定 ...
- FlappyBird Pygame
视频链接 GitHub链接:https://github.com/yanpeng1314/FlappyBird from InitObject import * def startGame(): mo ...
- 新闻热词:从爬虫到react native应用
背景 由于只想了解当天新增的top热词,减少过多信息干扰,打算做一款app实现这个功能. 架构: 热词抓取 -> mysql <=> nodejs <=> nginx & ...
- spring boot学习资源
http://blog.csdn.net/u014695188/article/details/52226134 http://www.jianshu.com/p/887c22723e43 Sprin ...
- Phone文件备份
一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...
- angular-file-upload封装为指令+图片尺寸限制
不了解angular-file-upload基础使用 请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址 下文如果有更好的建议请 ...