1、概述

本篇主要在之前的基础上,更加深入的介绍STL中的双向链表容器List,包括List类模板、迭代器iterator等。

2、List的结构

1)容器List是双向链表的结构,如下:

18 容器之list探索

解析:

a、List是环状的链式结构,在链表最后有块空白节点用于实现容器的前闭后开区间,用end()方法返回。

b、链表中包含迭代器node,里面包含操作符重载,如++来实现每个链表元素向指向下一个节点。

2)G2.9链表结构

18 容器之list探索

说明:容器list中复合一个_list_node<T>,而_list_node<T>是链表中数据,包括两个指向自身的指针和存放的数据。

链表list的模板类,如下:

18 容器之list探索

链表中复合的_list_node<T>数据,如下:

18 容器之list探索

链表中的迭代器(是类迭代器),如下:

18 容器之list探索

注意点:

a、类迭代器中通过5种typedef和操作符重载实现对node的操作,而node正是指向链表数据_list_node<T>;

b、如通过List<Foo>::iterator ite声明迭代器,Foo类型就是data数据对象,可以通过*ite取得Foo对象。

3、G2.9与G4.9的差异

18 容器之list探索

注意点:

a、G4.9List容器设计的迭代器类模板参数只有一个,其它两个都是在类中具体表示,这样比较简洁;

b、G2.9设计的数据node中的prev和next指向是void*,而实际上是指向node本身,并在G4.9中以这种方式实现。

相关文章:

  • 2021-08-15
  • 2021-09-02
  • 2021-08-17
  • 2021-07-06
  • 2021-05-01
  • 2017-12-02
  • 2021-08-13
  • 2021-08-26
猜你喜欢
  • 2022-01-12
  • 2021-07-31
  • 2021-04-13
  • 2018-01-04
  • 2021-08-06
  • 2020-03-26
  • 2018-05-02
  • 2021-08-13
相关资源
相似解决方案