slist屬于單鏈表,不在標準規格之內,是SGI STL特有的一種順序容器。由于slist的迭代器屬于前向迭代器,不能往前走,所以插入操作和list有所不同。根據STL的習慣,插入操作會將新元素插入于指定位置之前,但slist無法記錄前驅節點(需要從頭遍歷找出前驅節點),所以插入操作提供了insert_after()和erase_after()版本。
slist節點和迭代器的設計比list要復雜許多,它運用了繼承關系:
- __slist_node_base作為節點基本結構,派生出__slist_node
- __slist_iterator_base作為迭代器基本結構,派生出__slist_iterator
__slist_iterator_base類中的有一個指向__slist_node_base節點的指針,名叫node,以此來關聯迭代器和節點。slist將__slist_iterator作為它的迭代器。至于為什么要搞這么復雜,還沒有弄清楚,源碼剖析中說是為了更大的彈性。
參考:
《STL源碼剖析》 P186.
- 前言
- 順序容器 — heap
- 關聯容器 — 紅黑樹
- 關聯容器 — set
- 關聯容器 — map
- 關聯容器 — hashtable
- 關聯容器 — hash_set
- 關聯容器 — hash_map
- 算法 — copy
- 順序容器 — stack
- 順序容器 — queue
- 順序容器 — priority_queue
- 順序容器 — slist
- construct()和destroy()
- 空間配置器
- 函數適配器
- 迭代器以及“特性萃取機”iterator_traits
- 算法 — partial_sort
- 算法 — sort
- 仿函數
- 適配器(adapters)
- C++簡易vector
- C++簡易list
- STL算法實現
- C++模板Queue