各种类型container

  • deque

deque是一种分段连续的容器,特点是双向开口,使用起来可以认为它是一段连续的内存空间,不仅可以向前方增加内存空间,也可以向后方增加内存空间。
deque 模拟连续内存的实现方法:

clipboard.png
可以看出,deque通过一个vector存放控制器,使用控制器来串联一系列的缓冲器(buffer),从而达到逻辑上的连续效果。然后通过Iterator模拟,达到使用者使用连续的效果。

  • insert操作

clipboard.png
元素插入时若不在两端,会影响其他元素顺序,因此会先判断离哪边端点近,移动近的那部分元素。

  • deque 继承关系

clipboard.png

clipboard.png

容器queue&stack

clipboard.png

clipboard.png

queue其实就是只有deque的头的push_front和尾的pop_back,即实现了先进先出后进后出。stack是先进后出。严格的来讲,queue和stack更像是一个adapter。
注意:

clipboard.png
queue和stack也可以选用其他容器作为底层容器,只要它们能提供头和尾的push和pop操作。

RB-Tree

Red-Black tree(红黑树)是平衡二元搜索树(balanced Binary search tree)中常被使用的一种。
平衡二元搜索树的特征:排列规律,有利于search和insert,并保持适度平衡,无任何节点过深。

clipboard.png

  • 实现

clipboard.png
继承关系
clipboard.png

set&multiset

clipboard.png

clipboard.png

map&multimap

clipboard.png

clipboard.png

hashtable

clipboard.png

clipboard.png

hashtable通过hash function 将元素值转换为一个可进行modulus运算的值使得hash code经过运算之后能够够难够乱够随机的分布在hash table上,越是混乱,越不容易发生hash碰撞。

  • modules运算

clipboard.png

unordered container

  • unordered set
  • unordered multiset
  • unordered map
  • unordered multimap

clipboard.png


风斩冰华
27 声望12 粉丝

coding