美文网首页
29 STL(七)list容器

29 STL(七)list容器

作者: ca8519be679b | 来源:发表于2021-01-19 23:21 被阅读0次

    基本概念

    list也叫链表,是连式存储,和之前的容器比空间上非连续

    1

    如上,和数组连续空间不一样,列表存储空间额外预留了存储下一个元素的地址指针,尾部的下个节点为空所以用NULL。链表的特点是插入删除快,直接将新节点的地址和插入前的地址进行修改即可,而遍历则不如数组,链表的内容分为数据域和指针域

    2

    如上,除了单向链表,还有双向链表,存储的指针域多了前一个节点的地址。这样知道了一个节点不会只知道下一个节点位置,也能知道前一个节点的位置,当然可以看到头插头删和尾插尾删,以及insert指定位置删除,front,back获得首尾的数据,begin,end用于迭代器遍历

    优点,采用动态分配内存,不会浪费内存,同时因为vector插入删除可能要复制自身,首尾地址会变化,而链表除了操作首尾元素,否则不会改变

    构造方法

    3

    如上,可以看到构造方法也是无参,起止,N重复,拷贝构造,没啥可说的

    4

    如上,把所有构造方法都演示了一圈,注意,list的区间构造不支持+-操作,因为空间不是连续的

    赋值和交换

    5

    如上,就是按起止位置或n重复元素assign成员方法,=重载,以及swap实现2个链表的交换

    6

    如上

    大小操作

    7

    如上,我们还是经典的几个方法,和vector一样,可以empty判断是否为空,size返回个数,resize调整大小,可以使用默认参数补齐或者指定默认参数补齐,链表不用容量因为动态分配内存,

    8

    没什么说的,就是调用方法

    插入删除

    9 10

    如上,我们仅验证remove,这个是删除所有值一样的元素,而不是像python一样只删除一个

    数据存取

    11

    没啥说的,就是返回首尾元素,我们list是不支持索引的,不能使用[],at方法,所以必须从首尾元素遍历过去,不支持随机访问

    12

    如上,我们可以看到访问首尾元素,由于不支持随机访问,所以迭代器指针只支持++,--这样的操作,而不支持+=1,+=3这样的,而且能--,所以默认是双向链表

    反转和排序

    13

    反转和排序就是如上2个方法,reverse和sort

    14

    如上,没什么说的

    15

    当然sort方法还可以使用重载,默认升序,我们可以传入一个自定义的方法来比较,我们将方法传入2个参数,返回前者大于后者(bool值)即实现降序排列,如上。目前还没有讲仿函数,后面讲了也可以传入。我们记得还有deque也可以排序,但并不是成员方法,而是调用了algorithm模块的sort方法

    16

    我们可以来使用判断复合参数排序,类似元组,比如按照姓名降序,如果姓名相同,按照年龄升序,如上就是个小案例

    相关文章

      网友评论

          本文标题:29 STL(七)list容器

          本文链接:https://www.haomeiwen.com/subject/atvaaktx.html