一、概念
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;
判断是否为空
函数原型: empty()const;
l1.empty();
获取链表大小
函数原型: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个元素
链表排序
让整个链表变成升序状态,或者变成自定义的排序状态
函数原型:
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;
}
运行截图如下:
![](https://img-blog.csdnimg.cn/img_convert/f922b31af0d9449cbe0a426ff7ae0b5c.png)