STL之list容器

一、概念

list是线性表的一员相比之前的链表,STL提供了更为快速的方式。

二、头文件

头文件:#include<list>

三、初始化

格式为:explicit list (const allocator_type& alloc = allocator_type());

egg:以int和char类型作为参数来创建(其创建方式与vector一样)

list<int> l1   //创建了一个int型空链表
list<char> l2;  //创建了一个char型空链表
list<int>  l3(5);   //创建一个链表其有5个空元素
list<int> l4(2,10);     //创建一个链表其有2个元素内容为10
list<int> l5(l3.begin(),l3.end());  //创建一个链表其内容为l3的内容

四、迭代器

我们可以用来遍历链表

 list<int> li;
 for(list<int>::iterator it=li.begin();it!=li.end();it++)
  {
        cout<<*it<<' ';
  }

五、常用接口

以上边举例,我们创建一个链表如下:

list<int> l1;

  1. 判断是否为空

函数原型: empty()const;

l1.empty();
  1. 获取链表大小

函数原型:size_type size() const;

l1.size();
3.链表插入和删除

前插入函数原型:

void push_front (const value_type& val);

后插入函数原型:

void push_back (const value_type& val);

前删除函数原型:

void pop_front();

后删除函数原型:

void pop_back();

eg:

l1.push_front(10);  //往链表最前端插入元素10
l1.pop_front();     //删除链表最前端元素
l1.push_back(9);   //往链表最后端插入元素9
l1.pop_back(9);    //删除链表最后端元素
4.将元素插入链表指定位置

函数原型:

插入单一数据到指定位置:

iterator insert (iterator position, const value_type& val);

插入一段数据到指定位置:

void insert (iterator position, size_type n, const value_type& val);

插入一段别的容器的数据到指定位置:

template <class InputIterator>

void insert (iterator position, InputIterator first, InputIterator last);

代码示例

 l1.insert(li.begin(),10);     //在链表最前端插入数据10
 l1.insert(li.begin(),5,20);   //在链表最前端插入5个数据内容为20
  
 list<int> l2(2,50);   //创建一个新的链表l2,其拥有2个元素内容均为50
 l1.insert(li.begin(),li.begin(),li.end());  //在链表l1最前端插入链表上l2的全部内容
5.删除链表元素

删除一个元素,或者是一段区间的元素,将会自动缩减空间使用。

函数原型:

iterator erase (iterator position);

iterator erase (iterator first, iterator last);

l1.erase(l1.begin());     //删除第一个元素
l1.erase(l1.begin(),l1.begin()+4); //删除前4个元素
  1. 链表排序

让整个链表变成升序状态,或者变成自定义的排序状态

函数原型:

void sort();

template <class Compare> void sort (Compare comp);

l1.sort();   //对链表l1进行升序排序

六、代码示例

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

int main()
{
    list<int> l1(10);  //创建一个int且元素个数为10各的链表
    //p判断链表是否为空
    if(l1.empty())
    {
        cout<<"is empty()"<<endl;
    }
    else
        printf("no empty\n");
    //计算链表大小
    cout<<"list_size="<<l1.size()<<endl;

    //往链表头部插入元素10
    l1.insert(l1.begin(),10);

    cout<<"nlist_size="<<l1.size()<<endl;

    //删除链表头部第一个元素
    l1.erase(l1.begin());
    cout<<"删除后大小"<<l1.size()<<endl;

    //遍历依次插入源元素1-10
    for(int i=1;i<11;i++)
    {
        l1.push_back(i);
    }
     cout<<"插入后大小"<<l1.size()<<endl;

     //输出链表元素
     for(list<int>::iterator it=l1.begin();it!=l1.end();it++)
     {
        cout<<*it<<' ';
     }
        cout<<endl;

   //分别往头部和尾部插入元素
    l1.push_front(3);
    l1.push_front(7);
    l1.push_back(4);

     for(list<int>::iterator it=l1.begin();it!=l1.end();it++)
     {
        cout<<*it<<' ';
     }
     cout<<endl;

    //对链表进行排序
     l1.sort();
     cout<<"排序后链表为:"<<endl;
    //输出排序后链表
     for(list<int>::iterator it=l1.begin();it!=l1.end();it++)
     {
        cout<<*it<<' ';
     }
    
     return 0;
}

运行截图如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值