第八周 C++標(biāo)準(zhǔn)庫 體系結(jié)構(gòu)與內(nèi)核分析 Boolan 侯捷

生病臥床中……OTL

deque&queue 和 stack 深度探索上

容器 deque

容器 deque

分段串接

deque的iterator

deque的iterator

map 實(shí)際是一個 vector,里面是指針
iterator 里面四部分 cur、first、last、node
first 和 last 是每一段里的首尾

deque<T>::insert()

deque<T>::insert()

deque 如何模擬連續(xù)空間

模擬連續(xù)空間

容器 queue

容器 queue

容器 Stack

容器 Stack

queue和stack,關(guān)于其iterator和底層結(jié)構(gòu)

queue和stack,關(guān)于其iterator和底層結(jié)構(gòu)
  • queue和stack都可以選擇list或deque作為底層結(jié)構(gòu)。
  • queue不能選擇vector作為底層結(jié)構(gòu),而stack可以。
  • queue和stack都不能選擇set或map作為底層結(jié)構(gòu)

容器 rb_tree

Red-Black tree(紅黑樹)是平衡二元搜索樹(balanced binary search tree)中常被使用的一種。平衡二元搜索樹的特征是:排列規(guī)則有利search和insert,并保持平衡——無任何節(jié)點(diǎn)過深。
rb_tree提供“遍歷”操作及iterators。按正常規(guī)則(++ite)遍歷,便能獲得排序狀態(tài)(sorted)。
我們不應(yīng)使用rb_tree的iterators改變元素值(因為元素有其嚴(yán)謹(jǐn)排列規(guī)則)。編程層面(programming level)并未阻絕此事。如此設(shè)計是正確的,因為rb_tree即將為set和map服務(wù)(作為其底部支持),而map允許元素的data被改變,只有元素的key才是不可被改變的。
rb_tree提供兩種insertion操作:insert_unique()insert_equal()。前者表示節(jié)點(diǎn)的key一定在整個tree中獨(dú)一無二,否則插入失敗;后者表示節(jié)點(diǎn)的key可以重復(fù)。

容器 rb_tree

容器 _Rb_tree

容器 _Rb_tree

handle and body
手法和本體分開

容器set,multiset

容器set,multiset
容器set

set的所有操作,都轉(zhuǎn)呼叫底層t的操作。從這層意義看,set未嘗不是個container adapter。

容器map,multimap

容器map,multimap
容器map

容器map,獨(dú)特的operator[]

容器map,獨(dú)特的operator[]

容器 hashtable

容器 hashtable

Separate Chaining
分開-串聯(lián)
鏈表太長要打散,bucket籃子過長
元素個數(shù)比籃子個數(shù)還多,就要打散
打散的方式就是把籃子增加兩倍

iterator

hash_function,hash-code

hashcode值要夠亂才好
一開始就可以設(shè)置籃子大小

unordered 容器

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

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

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