2018-02-17

Boolan STL 第三周

deque:只能兩頭進(jìn)兩頭出的容器,實現(xiàn)為分段連續(xù),使用者感覺用起來是整體連續(xù)的。

deque's iterator:由cur,first,last,node4個指針構(gòu)成,它內(nèi)部提供模擬出連續(xù)空間的功能。

deque的insert()實現(xiàn):

不是頭和尾的情況下

deque模擬連續(xù)空間的實現(xiàn):

stack:先進(jìn)后出,前閉后開。

queue:先進(jìn)先出,單向移動。

queue和stack不允許遍歷,不提供iterator。

queue和stack也可以選擇list作為底層,stack還可選vector作為底層,只要滿足提供使用的接口。

rb_tree:紅黑樹,是一種平衡二院搜索樹,有利于search和insert,保持適度平衡。

rb_tree提供iterator遍歷,單不應(yīng)使用iterator改變key的值。

rb_tree兩種insert():insert_unique不允許放入重復(fù)值,無法插入但不會報錯,insert_equal()允許放入重復(fù)值。

rb_tree實現(xiàn):

rb_tree用例:

set/multiset:底層調(diào)用紅黑樹,set調(diào)用rb_tree的insert_unique(),multiset調(diào)用insert_equal()

set實現(xiàn):

map與multimap同理與set/multiset。

map實現(xiàn):

hashtable:哈希表,將object通過hash_function轉(zhuǎn)換為code存入不同的bucket中,若兩個元素放入同一個bucket中則為collision,沖突元素會和原來的元素以單向鏈表連接,當(dāng)元素個數(shù)等于bucket個數(shù)時,bucket數(shù)會擴(kuò)充到將近兩倍(G2.9版是兩倍附近的質(zhì)數(shù)),元素重新打散重排(rehashing)。

hashtable實現(xiàn):

hashtable用例:

hash_function:對常見的數(shù)據(jù)類型系統(tǒng)給出了哈希函數(shù),但對于c++的string類沒有自帶的hash_function,需要自己寫。

系統(tǒng)默認(rèn)的
char*類型hash_function

unordered容器:將c++11以前的hash_set/multiset/map/multimap改為unordered_set/multiset/map/multimap

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容