码迷,mamicode.com
首页 > 其他好文 > 详细

STL list 的insert()和erase()

时间:2014-07-13 17:51:48      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   数据   

list 类提供了insert(),erase()函数,它们分别增加和删除一个位于迭代器位置的元素。

1,  insert()

iterator  insert(iterator pos,const T &vaule);
//在pos前插入vaule,返回新元素的迭代器,不影响现有迭代器。

bubuko.com,布布扣bubuko.com,布布扣

#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();
}

运行结果:

bubuko.com,布布扣

在表的首元素插入数据元素0,newIter指向新插入的0,iter还是指向原来的1

 

2,  erase()

void erase(iterator pos);
//删除pos指向的元素,删除后pos指向未知

 

bubuko.com,布布扣bubuko.com,布布扣

#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();
}

运行结果:

bubuko.com,布布扣

删除表的首元素,表少了一个元素,但是iter却指向了未知,这不是我们期望的!

故我们可以使用

erase(iter++) 代替 erase(iter)

erase(iter++)相当于把迭代器当前的值给erase的参数,同时又将迭代器iter指向下一个元素。

bubuko.com,布布扣bubuko.com,布布扣

#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();
}

运行结果:

bubuko.com,布布扣

 

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++;
    }
}

运行结果:

bubuko.com,布布扣

 

STL list 的insert()和erase(),布布扣,bubuko.com

STL list 的insert()和erase()

标签:style   blog   http   color   使用   数据   

原文地址:http://www.cnblogs.com/qianwen/p/3841201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!