C++ STL (List)

STL list 是一个双向链表,迭代器具备前移和后移的能力。list 有一个重要的性质:插入操作和结合操作会造成原有的迭代器失效。

#include<iostream>
#include<list>
#include<algorithm>
using namespace std;

void Show(int nValue)
{
    cout << nValue << " ";
}
int main()
{
    list<int> lis(5,10);//创建一个链表,链表具有五个节点,每个节点初始化为10;
    list<int>::iterator ite=lis.begin();
    //链表因为是不连续的所以不能跟数组一样用下标遍历;只能用指针遍历;
    cout<<"原始链表:";
    while(ite !=lis.end())
    {
        cout<< *ite << " ";
        ++ite;
    }
    cout << endl;

    //一、插入作为尾;
    cout<<"插入作为尾:";
    lis.push_back(11);
    lis.push_back(11);
    lis.push_back(12);
    lis.push_back(12);
    lis.push_back(13);
    lis.push_back(15);

    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;
    //二、插入作为头:
    cout<<"插入作为头:";
    lis.push_front(7);
    lis.push_front(7);
    lis.push_front(4);
    lis.push_front(7);
    lis.push_front(2);
    lis.push_front(4);
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;

    //三、删除头
    cout<<"删除头:";
    lis.pop_front();
    lis.pop_front();
    lis.pop_front();
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;
    //四、删除尾
    cout<<"删除尾:";
    lis.pop_back();
    lis.pop_back();
    lis.pop_back();
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;

    //五、将数值为value的所有元素移除
    cout<<"移除10:    ";
    lis.remove(10);
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;

    //六、将“连续而相同的元素”移除只剩一个
    cout<<"将“连续而相同的元素”移除只剩一个:";
    lis.unique();
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;

    //七、将x结合于position所指位置之前。X 必须不同于*this
    //cout<<"新建一个链表全部插入到7之前: ";
    ite=::find(lis.begin(),lis.end(),7);
    list<int> Newlis(2,1);//新建一个链表
    Newlis.push_back(2);
    Newlis.push_back(3);
    Newlis.push_back(5);


    //lis.splice(ite,Newlis);
    //::for_each(lis.begin(),lis.end(),&Show);
    //cout<<endl;

    //八、将i所指的元素结合于position所指位置之前。Position 和 i 可指向同一个list
    //cout<<"新建一个链表其中的值为5的节点插入到7之前: ";

    list<int>::iterator First=::find(Newlis.begin(),Newlis.end(),5);

    //lis.splice(ite,Newlis,First);
    //::for_each(lis.begin(),lis.end(),&Show);
    //cout<<endl;

    //九、将[first, last)内的所有元素结合于 \
          position 所指的位置之前,position和[first, last)可指向同一个list,\
          但是position 不能位于[first, last)之内。
    cout<<"新建一个链表其中的值为[2,5)的一段节点插入到7之前: ";
    list<int>::iterator End=::find(Newlis.begin(),Newlis.end(),2);
    lis.splice(ite,Newlis,End,First);
    ::for_each(lis.begin(),lis.end(),&Show);
    cout<<endl;

    system("pause");
    return 0;
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值