STL list双向链表容器

                      list双向链表容器

list的定义

list的头文件:#include<list>


【list的优点】

        list容器实现了双向链表的数据结构,数据元素时通过链表指针串连成逻辑意义上的线性表,list可以对任一位置的元素进行极快速插入、删除和查找。


【list的插入注意】

        list对象的节点并不要求在一段连续的内存中,所以,对于迭代器,只能通过“++”或“--”的操作将迭代器移动到插入位置处,不能对迭代器进行+n或-n操作


【list的函数】

    list<int>l;

1.  l.push_back(x)                   往尾部插入元素x,链表自动扩张

2.  l.push_front(x)                   往首部插入元素x,链表自动扩张

3.  l.insert(it,x)                         往迭代器位置it处插入元素x,链表自动扩张,list中间插入和其他容器略有不同,

                                                  it只能通过“++”或“--”移动到想插入位置,详情请看下面代码

4.  l.remove(x)                         删除值等于x的所以元素

5.  l.pop_front()                        删除链表首元素

6.  l.pop_back()                        删除链表尾元素

7.  l.erase(it)                             通过迭代器位置it删除元素,还是it只能通过“++”或“--”得到

8.  l.unique()                             剔除连续重复元素,值保留一个

9.  l.sort()                                  对链表元素进行升序排序


【list的基本操作】

1.插入、删除

#include<list>
#include<iostream>
using namespace std;
int main()
{
    list<int>l;
    // 首部插入push_front()
    l.push_front(5);
    l.push_front(2);
    l.push_front(1);
    // 尾部插入push_back()
    l.push_back(5);
    l.push_back(2);
    l.push_back(1);
    list<int>::iterator it;
    // insert()往迭代器中插入元素时,迭代器只能进行"++"或"--"操作,不能进行+n或-n操作
    it=l.begin();
    for(int i=0;i<3;i++)
        it++;
    // 中间插入insert(x,y) x表示迭代器的位置,y表示插入的数据
    l.insert(it,20);
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    list<int>::reverse_iterator rit;
    for(rit=l.rbegin();rit!=l.rend();rit++)

        cout<<*rit<<" ";
    cout<<endl;
    // remove()删除链表中的一个元素,值相同都会被删除
    l.remove(1);
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // push_front首部删除
    l.pop_front();
    // push_back尾部删除
    l.pop_back();
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // 迭代器只能进行"++"或"--"操作,不能进行+n或-n操作
    it=l.begin();
    it++;
    // erase()删除迭代器位置上的元素
    l.erase(it);
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // clear()清空链表
    l.clear();
    cout<<l.size()<<endl;
    return 0;
}

2.查找、剔除、排序

#include<list>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    list<int>l,h(3,4);
    l.push_front(5);
    l.push_front(2);
    l.push_front(1);
    l.push_back(5);
    l.push_back(5);
    l.push_back(2);
    l.push_back(1);
    list<int>::iterator it;
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // find()查找在list中需要用到算法头文件
    // 采用find()查找算法在链表中查找,找到返回该元素的迭代器位置,否则返回end()迭代器位置
    /* list容器查找和之前学的查找不同,应注意其格式 */
    it=find(l.begin(),l.end(),5);
    if(it!=l.end())
        cout<<"find it"<<endl;
    else
        cout<<"not find it"<<endl;
    // 使用sort()方法对链表排序,sort排序是升序
    l.sort();
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // 剔除连续重复元素(只保留一个)
    l.unique();
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    // merge :合并两个list类型的容器
    l.merge(h);
    for(it=l.begin();it!=l.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值