【C++】list的使用

目录
一、list初始化的几种方式
二、list数据的访问形式
三、list容器
四、list数据的操作
五、链表相关操作

一、list初始化的几种方式

1、这里的参数是内存池,我们一般用默认的就行
list (const allocator_type& alloc = allocator_type());
使用案例:

list<int> li;//初始化一个空的链表li

2、用n个val构造一个链表
list (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());
使用案例:

list<int> li2(10, 2);//构造10个值为2的链表

3、迭代器区间构造链表
template <class InputIterator> list (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
使用案例:

list<int> li2(10, 2);
list<int> li3(li2.begin(), li2.end());//使用li2链表的begin位置到end位置来构造链表li3

4、拷贝构造
list (const list& x);
使用案例:

list<int> li2(10, 2);
list<int> li4(li2);//用li2构造li4

5、initializer list构造链表
list (initializer_list<value_type> il, const allocator_type& alloc = allocator_type());
使用案例:

list<int> li = { 1,2,3,4,5 };//类似数组的初始化形式

二、list数据的访问形式

链表提供了两种访问数据的形式,分别是frontback
使用案例:

list<int> li = { 1,2,3,4,5 };
cout << li.front() << endl;//打印1
cout << li.back() << endl;//打印5

三、list容器

empty 判断链表是否为空的
bool empty() const;
使用案例:

list<int> li = { 1,2,3 };
if (!li.empty())
{
	cout << "不为空" << endl;
}

size 得到链表的有效数据个数
size_type size() const;
使用案例:

list<int> li = { 1,2,3 };
cout<<li.size()<<endl;//打印3

四、list数据的操作

push_back 尾插数据
void push_front (const value_type& val);
使用案例:

list<int> li;
li.push_back(1);

pop_back 尾删数据
void pop_back();
使用案例:

list<int> li;
li.push_back(1);
li.pop_back();

同理:push_frontpop_front是一样的用法

insert
insert (iterator pos, const value_type& val);
在pos位置插入val
使用案例:

list<int> li;
li.insert(li.begin(), 1);

void insert (iterator pos, size_type n, const value_type& val);
在pos位置插入n个val
使用案例:

list<int> li;
li.insert(li.begin(), 2,10);

template <class InputIterator> void insert (iterator pos, InputIterator first, InputIterator last);
在pos位置插入迭代器区间first到last之间的数据
使用案例:

list<int> li={3,3,1};
list<int> li2 = { 0,1,2,3,4,5 };
li2.insert(++li2.begin(), li.begin(), --li.end());
//将li.begin()到--li.end()的数据插入到++li2.begin()的位置

resize
void resize (size_type n, const value_type& val=value_type())
resize的用法和vector里面是一样,当n<size时,就只保留前n个数据;当n>size时,从size位置开始到n,值都赋为val
使用案例:

list<int> li = { 1,2,3,4,5 };
li.resize(10, 2);//链表的数据为1,2,3,4,5,2,2,2,2,2
li.resize(2);//链表的数据为1,2

swap
void swap (list& x);
交换两个链表
使用案例:

list<int> li = { 1,2,3,4,5 };
list<int> li2;
li.swap(li2);

erase
iterator erase (const_iterator position);
使用案例:

list<int> li={1,2,3};
li.erase(li.begin());//删除begin位置的数据

iterator erase (const_iterator first, const_iterator last);

list<int> li={1,2,3};
li.erase(li.begin(),--li.end());//删除begin位置到--end位置的数据

clear
void clear()
使用案例:

list<int> li={1,2,3};
li.clear();//清空链表数据

五、链表相关操作

remove
void remove (const value_type& val);
使用案例:

list<int> li = { 1,2,2,2,5 };
li.remove(2);//移除链表中的所有2

unique
void unique();
去除重复数据,只保留一个
使用案例:

list<int> li = { 1,2,2,2,5 };
li.unique();
for (auto e : li)
{
	cout << e << " ";
}
//打印结果1,2,5

sort
void sort();
给链表排序,默认是升序
使用案例:

list<int> li = { 5,4,3,2,1 };
li.sort();
for (auto e : li)
{
	cout << e << " ";
}
//打印结果1,2,3,4,5

reverse
void reverse();
反转链表
使用案例:

list<int> li = { 1,2,3,4,5 };
li.reverse();
for (auto e : li)
{
	cout << e << " ";
}
//打印结果5,4,3,2,1

splice
void splice (iterator pos, list& x);
使用案例:

list<int> li = { 5,4,3,2,1 };
list<int> li2 = { 0,0,0 };
li.splice(li.begin(), li2);//将链表li2的数据转移到li.begin()的位置
for (auto e : li)
{
	cout << e << " ";
}
//打印结果0,0,0,5,4,3,2,1

void splice (iterator pos, list& x, iterator i);
使用案例:

	list<int> li = { 5,4,3,2,1 };
	list<int> li2 = { 6,7,8 };
	li.splice(li.begin(), li2, li2.begin());
	//将li2链表的li2.begin()位置的数据转移到li.begin()的位置
	for (auto e : li)
	{
		cout << e << " ";
	}

void splice (iterator pos, list& x, iterator first, iterator last);
使用案例:

list<int> li = { 5,4,3,2,1 };
list<int> li2 = { 9,9,9};
li.splice(li.end(), li2, li2.begin(), li2.end());
//将li2链表的li2.begin()位置到li2.end()位置的数据转移到li.end()位置
for (auto e : li)
{
	cout << e << " ";
}

merge
void merge (list& x);
将两个升序的链表有序拼接在一起
使用案例:

list<int> li = { 5,4,3,2,1 };
list<int> li2 = {10,9,8,7,6};
li.sort();
li2.sort();
li2.merge(li);//将li有序拼接到li2上
for (auto e : li2)
{
	cout << e << " ";
}
//打印结果1,2,3,4,5,6,7,8,9,10

本篇list的使用就讲解完毕了,有问题请评论哦,我会及时解答和更正本文章的错误,我们下篇来讲解一下list的底层原理
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值