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()的更多相关文章

  1. 编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  2. insert erase和replace的例子

    9.43 编写一个函数,接受三个string参数s.oldVal和newVal.使用迭代器及insert和erase函数将s中所有oldval替换为newVal.测试程序,用它替换通用的简写形式,如, ...

  3. STL:remove和erase区别

    C++ STL中的remove和erase函数曾经让我迷惑,同样都是删除,两者有什么区别呢? vector中的remove的作用是将等于value的元素放到vector的尾部,但并不减少vector的 ...

  4. STL set 用法

      c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. ...

  5. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  6. C++ std::map::erase用法及其陷阱

    1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...

  7. stl学习(三)crope的用法

    转载自http://blog.csdn.net/iamzky/article/details/38348653 曾经我不会写平衡树……于是在STL中乱翻……学到了pb_ds库中的SXBK的斐波那契堆. ...

  8. STL标准库面试常考知识点

    C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vecto ...

  9. C++ STL 迭代器失效问题

    之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我 ...

随机推荐

  1. JAVA中的数据存储空间简述

    在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ): 最快的存储区,因为它位于不同于其他存储区——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...

  2. WebService的学习

    这篇文章不错,直接转了 http://blog.csdn.net/terryzero/article/details/5976638#comments

  3. BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]

    2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...

  4. oracle 字符串截取substr和instr

    SUBSTR(string,start_position,[length])    求子字符串,返回字符串解释:string 元字符串       start_position   开始位置(从0开始 ...

  5. 初探solr搜索

    solr是一个基于lucene的搜索引擎,lucene是一个全文检索引擎的架构.solr在此之上进行了封装完善,变成了一个很流行实用的搜索引擎,可以应对绝大部分的搜索需求.使用搜索引擎有以下几点好处: ...

  6. PHP 支持8种基本的数据类型

    四种标量类型: boolean (布尔型):这是最简单的类型,只有两种取值,可以为 TRUE/true 或 FALSE/false ,不区分大小写.详细请查看:PHP布尔类型(boolean)inte ...

  7. 阿里云pai项目使用说明

    PAI项目创建方法 购买region 进入MaxCompute,购买相应region,目前机器学习只支持华东2(GPU公测免费)以及华北2(GPU计划收费),注意选择"按量后付费" ...

  8. Swift iOS 日期操作:NSDate、NSDateFormatter

    1.日期(NSDate) // 1.初始化 // 初始化一个当前时刻对象 var now = NSDate() // 初始化一个明天当前时刻对象 var tomorrow = NSDate(timeI ...

  9. Zabbix 3.0 监控Web

    zabbix 界面配置 触发器添加

  10. for 循环中的 i 变量问题

    1:如何点击每一个 li 的时候 alert 输出其index? <ul id="test"> <li>111</li> <li>2 ...