每次插入或者刪除乙個元素,就配置或者釋放空間。
插入和刪除元素操作都是常數時間。
list的節點:
templatestruct
__list_node
是乙個雙向鍊錶
list的迭代器:
不能用普通指標作為迭代器
typedef __list_node*link_type;link_type node;
list是乙個雙向鍊錶,提供迭代器為雙向迭代器,可向前向後移動,但不提供隨機訪問能力
插入刪除接合操作不會引起list迭代器的失效。
list的資料結構:
環狀雙向鍊錶,只需要乙個指標就可以完整表現整個鍊錶
typedef __list_nodelist_node;typedef list_node*link_type;
link_type node;
如果讓node指向刻意置於尾端的乙個空白節點,就可以符合stl前閉後開的原則。
用於配置、釋放、構造、銷毀節點的函式
link_type get_nodevoid
put_node(link_type p)
link_type create_node(
const t&x)
void
destroy_node(link_type p)
關鍵函式insert最簡單的形式
iterator insert(iterator position, const t&x)
push_back是在insert的基礎上實現的
list內部提供乙個遷移操作transfer:把某個連續範圍內的元素遷移到某個位置之前。
是其他複雜操作如splice sort merge等的基礎,是非公開介面。
voidtransfer(iterator position, itrator first, iterator last)
}
stl不能用標準演算法中的sort因為其不能提供隨機訪問迭代器,只能用自己的sort
任然用快排實現。
STL原始碼剖析 list
相較於vector的連續線性空間,list就顯得複雜許多,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。因此,list對於空間的運用有絕對的精準,一點也不浪費。而且,對於任何位置的元素插入或元素移除,list永遠是常數時間。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。另外,還...
STL原始碼剖析 list!!!
list和vector是兩個最常被使用的容器。相較於vector的連續線性空間,list就顯得複雜許多,它的好處就是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。而且對於任何位置的元素插入或元素移除,list永遠是常數時間。list是乙個雙向鍊錶,stl的list節點結構 template st...
STL原始碼剖析 三 list
gcc 版本4.4.0 這次我們看看stl中list是怎樣設計的。首先這個list要分為兩個部分,list結構和list節點的結構。首先看看list的節點 list node 由於 list node 是繼承 list node base。所以先來看看 list node base struct l...