STL學習筆記——序列式容器(一級容器)
阿新 • • 發佈:2018-12-31
序列式容器(線性結構,儲存了元素操作時的邏輯順序)
array//C++內建
vector
heap//以演算法形式呈現(***_heap)
priority_queue
list
slist
deque
stack//介面卡
queue//介面卡
1.vector
1)vector的實現技術,關鍵在於對其大小的控制以及重新配置時的資料移動效率。(配置新空間/資料移動/釋放舊空間)
2)vector維護的是一個連續線性空間,因此普通指標可以作為vector的迭代器。vector支援隨機存取,所以vector提供的是Random Access Iterator。
3)增加新元素時,如果超過了當時的容量,則會重新分配一塊大小為原來容量兩倍 的記憶體,
前半段放置原來的元素,後半段放置新增的元素。若容量仍不足,就擴張至足夠大的空間。並且釋放原來的舊空間。
4)對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了。
2.list
1)list每次插入或刪除一個元素,就配置或釋放一個元素空間。
2)list的結點不保證空間連續,所以普通指標不可以作為vector的迭代器,要重新設計。
3)list是一個環狀雙向連結串列,迭代器要前後移動,所以list提供的是Bidirectional iterator。
4)插入操作和接合操作不會引起list迭代器的失效,刪除操作隻影響指向被刪除元素的那個迭代器,其它迭代器不受影響 。
5)list的迭代器內包含一個結點指標,用來指向list的結點。list的內部有一個指向空白結點的結點指標,可以用來初始化迭代器內的結點指標。
iterator begin() { return (link_type) ((*node).next); }
iterator end() { return node; }
3.deque
1)deque是動態的以分段連續的空間組合而成,隨時可以增加一段新的空間並連線起來;沒有所謂容量概念,沒有必要提供空間保留的功能;
2)deque允許常數時間內對頭端進行元素的插入和刪除操作;
3)deque內部維護一個指向map的指標,map是塊連續空間,裡面的每個元素都是一個指標,指向一個緩衝區,緩衝區真正儲存元素 ;
map預設的最少結點個數為8,並且結點的使用由中間向兩邊擴充套件;
deque iterator包含一個指向map的指標,同時包含三個分別指向緩衝區當前以及頭尾的指標;
iterator通過設定新的指向map的指標來實現移動;
4)當map的結點數不夠時,需要重新分配新的空間給map,並且需要copy原來的資料,釋放原來的空間;
5)對deque進行的排序操作,為了最高效率,可將deque先完整複製到一個vector,將vector排序後,再複製回deque。
array//C++內建
vector
heap//以演算法形式呈現(***_heap)
priority_queue
list
slist
deque
stack//介面卡
queue//介面卡
1.vector
1)vector的實現技術,關鍵在於對其大小的控制以及重新配置時的資料移動效率。(配置新空間/資料移動/釋放舊空間)
2)vector維護的是一個連續線性空間,因此普通指標可以作為vector的迭代器。vector支援隨機存取,所以vector提供的是Random Access Iterator。
3)增加新元素時,如果超過了當時的容量,則會重新分配一塊大小為原來容量兩倍
前半段放置原來的元素,後半段放置新增的元素。若容量仍不足,就擴張至足夠大的空間。並且釋放原來的舊空間。
4)對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了。
2.list
1)list每次插入或刪除一個元素,就配置或釋放一個元素空間。
2)list的結點不保證空間連續,所以普通指標不可以作為vector的迭代器,要重新設計。
3)list是一個環狀雙向連結串列,迭代器要前後移動,所以list提供的是Bidirectional iterator。
4)插入操作和接合操作不會引起list迭代器的失效,刪除操作隻影響指向被刪除元素的那個迭代器,其它迭代器不受影響
5)list的迭代器內包含一個結點指標,用來指向list的結點。list的內部有一個指向空白結點的結點指標,可以用來初始化迭代器內的結點指標。
iterator begin() { return (link_type) ((*node).next); }
iterator end() { return node; }
3.deque
1)deque是動態的以分段連續的空間組合而成,隨時可以增加一段新的空間並連線起來;沒有所謂容量概念,沒有必要提供空間保留的功能;
2)deque允許常數時間內對頭端進行元素的插入和刪除操作;
3)deque內部維護一個指向map的指標,map是塊連續空間,裡面的每個元素都是一個指標,指向一個緩衝區,緩衝區真正儲存元素
map預設的最少結點個數為8,並且結點的使用由中間向兩邊擴充套件;
deque iterator包含一個指向map的指標,同時包含三個分別指向緩衝區當前以及頭尾的指標;
iterator通過設定新的指向map的指標來實現移動;
4)當map的結點數不夠時,需要重新分配新的空間給map,並且需要copy原來的資料,釋放原來的空間;
5)對deque進行的排序操作,為了最高效率,可將deque先完整複製到一個vector,將vector排序後,再複製回deque。