相比于vector的连续线型空间,list显得复杂许多,但是它的好处在于插入或删除都只作用于一个元素空 间,因此list对空间的运用是十分精准的,对任何位置元素的插入和删除都是常数时间。list不能保证节 点在存储空间中连续存储,也拥有迭代器,迭代器的“++”、“--”操作对于的是指针的操作,list提供的迭 代器类型是双向迭代器:Bidirectional iterators。

list节点的结构见如下源码:

 

 从源码可看出list显然是一个双向链表。list与vector的另一个区别是,在插入和接合操作之后,都不会造 成原迭代器失效,而vector可能因为空间重新配置导致迭代器失效。

此外list也是一个环形链表,因此只要一个指针便能完整表现整个链表。list中node节点指针始终指向尾 端的一个空白节点,因此是一种“前闭后开”的区间结构

list的空间管理默认采用alloc作为空间配置器,为了方便的以节点大小为配置单位,还定义一个 list_node_allocator函数可一次性配置多个节点空间

由于list的双向特性,其支持在头部(front)和尾部(back)两个方向进行push和pop操作,当然还支持 erase,splice,sort,merge,reverse,sort等操作,这里不再详细阐述。