
list node
link_type node
:存储一个list元素
typedef __list_node* link_type
:存储的是指向元素的指针
- 所以每个list节点的大小为4字节
__list_node
:存储实际元素结构的结构体
- prev、next:两个void指针,分别指向前后节点
- data:存储实际的数据
list iterator

__list_iterator
:迭代器
- iterator需要根据node内的next或prev指针做移动,而不是直接对node做++或—
- 所以iterator需要大量的操作符重载
operator++
:两个版本,一个前置++,一个后置++,后置版本接受一个int参数以作区分(该参数仅做区分,没有意义)
- operator++():前置版本
- 将node移动到node→next
- 返回this(按引用返回)
- operator++(int):后置版本
- 调用重载的operator*执行一次拷贝构造,创建出临时对象temp
- 调用重载的operator++前置版本将node移动到node→next
- 返回临时对象temp
- 注意是按值返回,这也限制了后置版本++的连续使用(因为int类型也不能连续使用后置++)
operator*
与operator->
:返回的是node->date,operator->调用operator*实现
G4.9版本相比G2.9的改进

改进点
- iterator的模板参数变为了一个
- node结构使用了继承,node_base包含了两个指向自身类型的指针(对应prev和next)
- node成员的类型更加精确

