list的结点
list的迭代器
迭代器类型是Bidirectional Iterators
迭代器设计:内部是一个普通指针,但重载各种操作符号
list的数据结构
node刻意指向尾端的空白节点,node便符合STL中“前闭后开”的要求,成为last迭代器
如此,begin( ),end( ),empty( ),front( ),back( )函数便可轻易实现
list示意图
list的构造与内存管理:constructor, push_back, insert
list 预 设 使 用 alloc 做 为 空 间 配 置 器 , 并 据 此 另 外 定 义 了 一 个 list_node_allocator,为的是更方便以节点大小为配置单位:
list_node_allocator(n) 表示配置 n 个节点空间。以下4个函数,分别用来配置、释放、建构、摧毁一个节点:
list 提供有许多 constructors,其中一个是 default constructor,允许我们不指定任何参数做出一个空的 list 出来,目的是为了空list的初始化
empty list 图示
下面是insert的一个实现版本
基于此insert,就刻意实现list的push_back
由于 list 不像 vector 那样有可能在空间不足时做重新配置、数据搬移的动作,所以安插前的所有迭代器在安插动作之后都仍然有效
list 的元素操作:
push_front, push_back, erase, pop_front, pop_back,
clear, remove, unique, splice, merge, reverse, sort
push_front( )
push_back( )
erase( )
pop_front( )
pop_back( )

clear( )
remove( )
unique( )
在介绍splice、 merge、 reverse、 sort之前,先介绍transfer函数
list 内部提供一个所谓的迁移动作(transfer):将某连续范围的元素迁移到某个特定位置之前
以上七个动作,显示于下图
transfer 所接受的 [first,last) 区间,可以在同一个 list 之中
splice( ) (为提供各种版本弹性,有多个版本)
merge( )
reverse( )
sort( )
end