STL容器和底部原理
vector
二倍增长的动态数组,线性连续空间,有容量限制。每次扩大到二倍时要重置所有迭代器,开销很大
deque(双端队列)
双向开口的存储空间分段连续的数据结构,每段数据空间内部是连续的,而每段数据空间之间则不一定连续
正因为段之间不连续,所以他整体也是不连续的,不用担心容量问题
list(环状双向链表)
随机访问很慢
stack基于list or duque
queue基于list or deque
set(集合) multiset(多重集合) #include<set>
红黑树实现,set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列
内部以键值对方式存储,键值与实值相同,set的键值不允许更改,也不允许存放两个实值相同的元素
multiset允许重复的键值,也采用了红黑树
map(映射)multimap(多重映射) #include<map>
key值唯一,即插入时不能键值重复,红黑树的变体,数据按照排序规则插入,不能指定位置插入
可以修改实值但不能修改key
multimap允许重复的键值
同理可得
hash_set hash表,无序,不重复
hash_multiset hash表,无序,可重复
hash_map hash表,无序,不重复
hash_multimap hash表,无序,可重复
红黑树
根节点是黑色
红色节点的子节点一定是黑色(也意味着任一条路经,之后黑黑和红黑交替两种可能,没有红红)
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点