1.两级空间配置器
2.vector:
是个动态数组,随着元素的加入,它的内部机制能够自行的扩充空间容纳新元素;
但是当使用insert和erase时会出现迭代器失效问题
他们的创建和销毁都是用construct和destory函数
因为vector是连续存储的,所以erase时,会调用泛型函数copy做大量的调整;insert时,会将插入元素的个数于备用空间相比较(注意当备用空间够,则比较插入个数y于原有个数x,如果插入少,则先原有个数的前y个元素移动至尾端,然后将x-y移动至其后面,最后添加,如果插入个数x大于原有个数y,先将x-y个元素填充至最终位置上,然后将原有的个数放置到尾端,最后填充这y个元素)
3.list:是带头结点的双向链表
insert和erase不存在迭代器失效问题,list的insert于erase的方法是不同的,因为不是连续存储的他们
4.deque:由一段段连续空间组成,其中有中控器,它存放每一块连续空间的头端和尾端地址,便于管理
5.stack:是一个先进后出的数据结构,它只有一个开口,利用适配器模式,默认下将deque作为底层容器,然后封装一些方法来对模拟栈操作
stack没有迭代器,因为它不提供遍历功能;
stack也可以用list作为底层容器
6.queue:是一个先进先出的数据结构,其他跟stack相似
7.priority_queue:缺省时用大根堆完成,,将优先级作为堆排序的关键值
8.slist是一个单向链表,所耗用的空间小,某些操作更快
插入,删除会带来迭代器失效的问题
9.关联式容器:
set:它的键值就是实值,实值就是键值,利用红黑树实现的
map:所有的元素都是pair,同时拥有实值和键值,pair的第一个元素视为键值,第二个视为实值,map和set不允许两个元素拥有相同的键值
multiset和multimap:允许键值重复,因为他们插入操作采用的是低层机制红黑树的insert_equal不是insert_unque,红黑树和平衡二叉树有自动调整的功能,hashtable没有
hashtable:是一种字典结构,用空间换时间,提供常数时间的基本操作,但是hash表的设计离不开哈希函数,但是哈希函数会带来碰撞问题,目前解决碰撞问题的方法有:线性探测,二次探测,开链法
hash_set是以hashtable作为底层机制的,他们的使用方式跟set和map相同