Boolan STL 第三周
deque:只能兩頭進兩頭出的容器败砂,實現(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:先進后出屉佳,前閉后開。
queue:先進先出洲押,單向移動武花。
queue和stack不允許遍歷,不提供iterator杈帐。
queue和stack也可以選擇list作為底層体箕,stack還可選vector作為底層,只要滿足提供使用的接口挑童。
rb_tree:紅黑樹累铅,是一種平衡二院搜索樹,有利于search和insert站叼,保持適度平衡娃兽。
rb_tree提供iterator遍歷,單不應使用iterator改變key的值尽楔。
rb_tree兩種insert():insert_unique不允許放入重復值换薄,無法插入但不會報錯,insert_equal()允許放入重復值翔试。
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壁涎,沖突元素會和原來的元素以單向鏈表連接凡恍,當元素個數(shù)等于bucket個數(shù)時,bucket數(shù)會擴充到將近兩倍(G2.9版是兩倍附近的質(zhì)數(shù))怔球,元素重新打散重排(rehashing)嚼酝。
hashtable實現(xiàn):
hashtable用例:
hash_function:對常見的數(shù)據(jù)類型系統(tǒng)給出了哈希函數(shù),但對于c++的string類沒有自帶的hash_function竟坛,需要自己寫闽巩。
unordered容器:將c++11以前的hash_set/multiset/map/multimap改為unordered_set/multiset/map/multimap