c++必修:容器list

1介绍

在这里插入图片描述

带头双向循环的结构,类似我们以前学的链表吗,他物理结构不是连续 的,逻辑顺序是连续的。
这里的自定义类型析构要释放每一个空间
在这里插入图片描述
这里构造也是四个构造,和上一节vector一样的。

2访问

在这里插入图片描述

这里不实现[],因为它的物理空间不是连续的。因此不能用[],没有重载这个功能。

3插入

在这里插入图片描述
在这里插入图片描述

list支持头插头删,也支持尾插尾删,insert和erase和vector一样是迭代器访问位置的。

4push_back和emplace_back

在这里插入图片描述

这里value_type是 T
在这里插入图片描述
我们写一个Pos作为模板,那么push_back就可以串Pos对象 和隐式类型 转换 成Pos的对象
在这里插入图片描述

在这里插入图片描述

这里({1,2})中{1,2}作为引用是value_type类型的进行隐式类型转换

这里 Args&&… args是可变模板参数
我们也可以传pos对象让它推模板
在这里插入图片描述
我们在这里就不能传{1,2}了 ,因为类型不确定{1,2}作为形参的时候会被当成initializer_list的类型,所以出错,我们用(1,2)的形式就是直接构造会更加高效,不要先构造成Pos再拷贝构造了。

5特殊的接口

在这里插入图片描述

在这里插入图片描述

这里把list里的元素先排序,再去掉重复的元素。

在这里插入图片描述

这个是find和 erase的结合

在这里插入图片描述

这个结点是把x链表 里的值转到position位置,有三个版本可以是一段区间也可以是全部,插入的的链表也可以是自身

6list的排序

两种 方法

1list的内置接口sort是升序,
2要降序是要list1.sort(greater< int >())来降序序,vector没有sort接口,只能调算法库里面的。其中greater< int >是匿名对象,类似 于 >这个符号。
为什么list不能调算法库里面的?
我们要先普及一下迭代器从功能上分类

在这里插入图片描述

算法库里面的sort只支持随机迭代器,sort底层是快排,list迭代器 不支持-,不能实现
一般随机单向迭代器支持的双向 和随机 迭代器支持,反之不行,那么泛用性就是随机>双向>单向

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值