带头双向循环的结构,类似我们以前学的链表吗,他物理结构不是连续 的,逻辑顺序是连续的。 这里的自定义类型析构要释放每一个空间
这里构造也是四个构造,和上一节vector一样的。
这里不实现[],因为它的物理空间不是连续的。因此不能用[],没有重载这个功能。
list支持头插头删,也支持尾插尾删,insert和erase和vector一样是迭代器访问位置的。
这里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再拷贝构造了。
这里把list里的元素先排序,再去掉重复的元素。
这个是find和 erase的结合
这个结点是把x链表 里的值转到position位置,有三个版本可以是一段区间也可以是全部,插入的的链表也可以是自身
两种 方法
1list的内置接口sort是升序, 2要降序是要list1.sort(greater< int >())来降序序,vector没有sort接口,只能调算法库里面的。其中greater< int >是匿名对象,类似 于 >这个符号。 为什么list不能调算法库里面的? 我们要先普及一下迭代器从功能上分类
算法库里面的sort只支持随机迭代器,sort底层是快排,list迭代器 不支持-,不能实现 一般随机单向迭代器支持的双向 和随机 迭代器支持,反之不行,那么泛用性就是随机>双向>单向