STL原始碼剖析學習五 list

2022-08-18 16:51:10 字數 1132 閱讀 9602

每次插入或者刪除乙個元素,就配置或者釋放空間。

插入和刪除元素操作都是常數時間。

list的節點:

template

struct

__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_node

void

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等的基礎,是非公開介面。

void

transfer(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...