STL 淺入 容器 (一)

2021-07-11 17:14:15 字數 1184 閱讀 9600

stl裡的容器按元素在容器內的排序方式,分序列式和關聯式。

c++中的array就是乙個序列式容器,其中的元素集合呈線性關係。

stl中的序列式容器:等。其中stack和queue在技術上稱之為介面卡,即內部機制採用其他容器實現。

1.vector

特徵:類似陣列,但可以空間大小自動隨元素的數量改變。

vector的迭代器:由於其使用的是連續線性的空間,所以其迭代器實際就是原生指標,且為 random acccess iterator.

注意:插入、刪除操作會造成原有迭代器的失效。

2.list

特徵:記憶體開銷小適用廣,因為是乙個帶頭結點的環狀雙向鍊錶,所以對任何位置的插入或刪除需要的時間為常數(隨資料規模增大)

list的迭代器:使用特定的iterator類,其為bidirectional iterator

注意:list不能使用stl提供的通用sort演算法。因為sort演算法只接受random access iterator,所以提供了自己的sort演算法。

3.deque(雙向佇列)

特徵:沒有容量的概念,因為它是以分段的連續空間組合而成,隨時可以增加一段空間拼接起來。

注意:非必要,應盡量使用vector而不是deque.的確需進行排序時,可以先將元素複製到vector,排序後再複製回deque.

4.stack

特徵:先進後出的資料結構,只可以在頂端進行元素操作。

stack不支援對元素的遍歷,因此沒有迭代器。

5.queue

特徵:先進先出的資料結構,實現方案和stack基本一樣

6.heap

stl定義了一些heap操作的演算法:包括建堆,push_heap,pop_heap,sort_heap等

7.priority queue

特徵:擁有權值概念的queue,加入的元素按權值大小排列。

注意:priority_queue也是container adapter,它以vector為儲存結構,再以heap演算法進行處理:priority_queue的元素存放在乙個vector當中,按元素權值排列成乙個heap。

本文僅作學習記錄,無任何商用目的。

容器淺入深出之LinkedList

list介面下的主要兩個實現類,arraylist已經討論過了。這次再看看linkedlist的底層實現 linkedlist所實現的介面和繼承的父類和arraylist差不多,但是它多實現了乙個deque介面 linkedlist是基於鍊錶實現的,其中每個元素其實是每個節點內部的element,l...

STL 容器總結(一)

一 所有容器的共通操作 1 equality 和 inequality 運算子,返回 true 或者 false。2 assignment 運算子,將某個容器複製給另乙個容器。3 empty 會在容器沒有任何元素的時候返回 true,否則 false。4 size 返回目前容器中持有元素的數目。5 ...

XGBoost淺入淺出

xgboost風靡kaggle 天池 datacastle kesci等國內外資料競賽平台,是比賽奪冠的必備大殺器。我在之前參加過的一些比賽中,著實領略了其威力,也取得不少好成績。如果把資料競賽比作金庸筆下的武林,那麼xgboost可謂屠龍刀,號令天下,莫敢不從!倚天不出,誰與爭鋒?xgboost工...