1、概述
本篇主要在之前的基础上,更加深入的介绍STL中的双向链表容器List,包括List类模板、迭代器iterator等。
2、List的结构
1)容器List是双向链表的结构,如下:
解析:
a、List是环状的链式结构,在链表最后有块空白节点用于实现容器的前闭后开区间,用end()方法返回。
b、链表中包含迭代器node,里面包含操作符重载,如++来实现每个链表元素向指向下一个节点。
2)G2.9链表结构
说明:容器list中复合一个_list_node<T>,而_list_node<T>是链表中数据,包括两个指向自身的指针和存放的数据。
链表list的模板类,如下:
链表中复合的_list_node<T>数据,如下:
链表中的迭代器(是类迭代器),如下:
注意点:
a、类迭代器中通过5种typedef和操作符重载实现对node的操作,而node正是指向链表数据_list_node<T>;
b、如通过List<Foo>::iterator ite声明迭代器,Foo类型就是data数据对象,可以通过*ite取得Foo对象。
3、G2.9与G4.9的差异
注意点:
a、G4.9List容器设计的迭代器类模板参数只有一个,其它两个都是在类中具体表示,这样比较简洁;
b、G2.9设计的数据node中的prev和next指向是void*,而实际上是指向node本身,并在G4.9中以这种方式实现。