admin管理员组

文章数量:1446760

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迭代器 不支持-,不能实现 一般随机单向迭代器支持的双向 和随机 迭代器支持,反之不行,那么泛用性就是随机>双向>单向

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-15,如有侵权请联系 cloudcommunity@tencent 删除对象算法c++容器list

本文标签: c必修容器list