18 容器之list探索(学自Boolean)

来源:互联网 发布:教育网络策划方案 编辑:程序博客网 时间:2024/05/19 02:44

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中以这种方式实现。

原创粉丝点击