【STL标准库 & 范型编程】学习笔记(5):深度探索list

92 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

list结构

在这里插入图片描述

数据结构

  • 节点数据结构为:list_node
  • 类中实现iterator(因为此时进行++iter的时候需要迭代器智能的移动节点,而不只是简单的指针移动) 在这里插入图片描述

list_node中含有三部分数据:

  • prev:指向上一个节点的指针
  • next:指向下一个节点的指针
  • data:数据

在这里插入图片描述

迭代器iterator的模版实现:

在这里插入图片描述

其中

  • self& operator++()指的是前置++(类比与++i)
  • self operator++(int) 指的是后置++(类比与i++)
  • 这里参数int的作用就是区分是前置++还是后置++

C++中不允许后置++加两次

具体原因不清楚,所以这就是为啥前置++,self后面有&

在这里插入图片描述

注:上述list的实现为G2.9版本,list大小为4

G2.9与G4.9的区别

在这里插入图片描述

区别:

  • literator实现中参数的个数:G2.9是三个,G4.9是一个,其具体是&还是*在具体类中再实现
  • G2.9中prev、next都是指向空指针,而G4.9则是指向自己(这就是为啥G2.9中size为4,而G4.9中size为8,因为前者只有一个空指针,后者则是两个指针,一个指针size为4)

G2.9与G4.9中list的实现不同

G2.9中list的实现

  • list中只需一个类:node,具体实现类为_list_node

在这里插入图片描述

G4.9中list的实现

  • list继承于_list_base,_List_base的实现类为_List_impl....(实现较G2.9复杂,各有优缺点)

在这里插入图片描述