第八周 C++标准库 体系结构与内核分析 Boolan 侯捷

生病卧床中……OTL

deque&queue 和 stack 深度探索上

容器 deque

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第1张图片
容器 deque

分段串接

deque的iterator

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第2张图片
deque的iterator

map 实际是一个 vector,里面是指针
iterator 里面四部分 cur、first、last、node
first 和 last 是每一段里的首尾

deque::insert()

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第3张图片
deque::insert()

deque 如何模拟连续空间

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第4张图片
模拟连续空间

容器 queue

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第5张图片
容器 queue

容器 Stack

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第6张图片
容器 Stack

queue和stack,关于其iterator和底层结构

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第7张图片
queue和stack,关于其iterator和底层结构
  • queue和stack都可以选择list或deque作为底层结构。
  • queue不能选择vector作为底层结构,而stack可以。
  • queue和stack都不能选择set或map作为底层结构

容器 rb_tree

Red-Black tree(红黑树)是平衡二元搜索树(balanced binary search tree)中常被使用的一种。平衡二元搜索树的特征是:排列规则有利search和insert,并保持平衡——无任何节点过深。
rb_tree提供“遍历”操作及iterators。按正常规则(++ite)遍历,便能获得排序状态(sorted)。
我们不应使用rb_tree的iterators改变元素值(因为元素有其严谨排列规则)。编程层面(programming level)并未阻绝此事。如此设计是正确的,因为rb_tree即将为set和map服务(作为其底部支持),而map允许元素的data被改变,只有元素的key才是不可被改变的。
rb_tree提供两种insertion操作:insert_unique()insert_equal()。前者表示节点的key一定在整个tree中独一无二,否则插入失败;后者表示节点的key可以重复。

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第8张图片
容器 rb_tree

容器 _Rb_tree

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第9张图片
容器 _Rb_tree

handle and body
手法和本体分开

容器set,multiset

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第10张图片
容器set,multiset
第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第11张图片
容器set

set的所有操作,都转呼叫底层t的操作。从这层意义看,set未尝不是个container adapter。

容器map,multimap

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第12张图片
容器map,multimap
第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第13张图片
容器map

容器map,独特的operator[]

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第14张图片
容器map,独特的operator[]

容器 hashtable

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第15张图片
容器 hashtable

Separate Chaining
分开-串联
链表太长要打散,bucket篮子过长
元素个数比篮子个数还多,就要打散
打散的方式就是把篮子增加两倍

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第16张图片
iterator

hash_function,hash-code

hashcode值要够乱才好
一开始就可以设置篮子大小

unordered 容器

第八周 C++标准库 体系结构与内核分析 Boolan 侯捷_第17张图片
unordered容器

你可能感兴趣的:(第八周 C++标准库 体系结构与内核分析 Boolan 侯捷)