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 最初我 ...
随机推荐
- linux上的用户管理
作为一个专业的服务器发行版,CentOS上存在着n多个用户,作为一个专业的运维工程师,linux的用户管理和用户组的管理是做为一个SA必不可少的工作. 下面我们就先来谈谈linux中的用户管理: us ...
- ABP官方文档翻译 3.5 规约
规约 介绍 示例 创建规范类 使用仓储规约 组合规约 讨论 什么时候使用? 什么时候不使用? 介绍 规约模式是一种特别的软件设计模式,通过使用布尔逻辑将业务规则链接起来重新调配业务规则.(维基百科). ...
- JetBrains Pycharm 破解+汉化
准备材料: 1.JetBrains Pycharm 传送门: https://pan.baidu.com/s/1qZCpIR6 密码: rvrn 2.JetbrainsCrack-2.6.2. ...
- RandomAccess接口的使用
RandomAccess在类Collections的shuffle()方法中的使用:(jdk源码如下) /** * Randomly permute the specified list using ...
- HDU 1384 Intervals &洛谷[P1250]种树
差分约束 差分约束的裸题,关键在于如何建图 我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L ...
- Vigenère 密码
略简单的字符串+模拟. 原题链接:https://www.luogu.org/problem/show?pid=1079#sub 如果你对那个图感到懵逼,那属于正常,但没关系,这个图其实作用不大,我们 ...
- 【原】font-awesome IE6支持代码本人测试成功
<!--[if (gte IE 6)&(lte IE 8)]> <script type="text/javascript" src="js/n ...
- offset / scroll / client Left / Top
1.offsetHeight / Width (只读) offsetHeight:表示该元素在垂直方向占用的空间大小,包含元素的高度+上边框高度+下边框高度 offsetWidth:表示该元素在水平方 ...
- .NET图表控件(LightningChart )的用法
概述 LightningChart (LightningChart Ultimate) 软件开发工具包是微软Visual Studio 的一个插件,专攻大数据可视化呈现问题,用于 WPF(Window ...
- php语言基础(一)
一.php标记风格 1.1xml风格(常用) <?php echo "xml风格": ?> 1.2脚本风格 <script language="php& ...