STL原始碼剖析 list!!!

2021-09-19 16:27:25 字數 471 閱讀 3298

list和vector是兩個最常被使用的容器。相較於vector的連續線性空間,list就顯得複雜許多,它的好處就是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。而且對於任何位置的元素插入或元素移除,list永遠是常數時間。

list是乙個雙向鍊錶,stl的list節點結構:

template struct __list_node

list的迭代器是bidirectionaliterator。因為list是乙個雙向鍊錶,迭代器必須具備前移和後移的能力。

list有乙個重要的性質:插入操作和接合操作都不會造成原有的list迭代器失效。這在vector是不成立的,因為vector的插入操作可能造成記憶體重新配置,導致原有的迭代器全部失效。

sgi list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶,如果讓指標node指向刻意置於尾端的乙個空白節點,node便能符合stl對於「前閉後開」區間的要求。

STL原始碼剖析 list

相較於vector的連續線性空間,list就顯得複雜許多,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。因此,list對於空間的運用有絕對的精準,一點也不浪費。而且,對於任何位置的元素插入或元素移除,list永遠是常數時間。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。另外,還...

STL原始碼剖析 三 list

gcc 版本4.4.0 這次我們看看stl中list是怎樣設計的。首先這個list要分為兩個部分,list結構和list節點的結構。首先看看list的節點 list node 由於 list node 是繼承 list node base。所以先來看看 list node base struct l...

STL原始碼剖析學習五 list

每次插入或者刪除乙個元素,就配置或者釋放空間。插入和刪除元素操作都是常數時間。list的節點 template struct list node 是乙個雙向鍊錶 list的迭代器 不能用普通指標作為迭代器 typedef list node link type link type node list...