1. 配置器分为一级配置器和二级配置器,默认为二级配置器,二级配置器处理不了的大空间丢给一级配置器

2. list和vector区别:

  a.vector可能因为元素变化而导致迭代器失效,list不会

  b.list只能使用自己的成员函数sort,不能使用stl算法sort

  c.list是双向环形链表,而vector只是线性的存储空间。

  d.由于vector线性连续,其空间开销要比list大。

  e.list的随机访问性远不如vector。

3. deque是线性连续双开口,其头插性能高于vector。deque是分段的线性连续空间,不存在容量的概念。其迭代器十分复杂,所以在设计中尽量采用vector而不是deque。deque有一个掌控空间的中控器map,其是一个二级指针。deque的迭代器需要判断自己是否处在一片连续空间的边缘。

4.stack为栈,其底层是由缺省的deque作为实现的,封闭头部边为stack。其往往被归类为配接器。stack没有迭代器。

5.queue为队列,也没有迭代器供给遍历。其底层也是缺省的deque,封闭尾端的出口和前端的入口即为queue。也往往被称为配接器。

6.heap的底层是一个vector数组,思路是完全二叉树。sort_heap是不断地pop堆。heap也没有迭代器。heap一般以算法的形式呈现。

7.priority queue的底层思路为heap堆。实现为缺省的vector,没有迭代器,称为配接器。顶层为有限度权最高者。

8.关联式容器底层为rb-tree或者hashtable,和顺序式容器不同,其没有头尾和头尾操作。

9. 二叉搜索树:任何子节点的键值一定小于其右节点大于其左节点,中序遍历为有序数组。

10.平衡二叉搜索树是没有任何一个节点过深的二叉搜索树。

11. AVL tree是左右子树高度差距不超过一的平衡二叉搜索树。

12. set会根据元素的键值自动排序,且key就是value,value就是key,不允许存在相同的key,且不能通过迭代器改变set的值

13. map是所有元素都会自动排序,其所有元素为pair,first为key,second为value,不允许存在两个相同的key。

14. multiset基本同set,但其允许键值重复。同理multimap基本同map,也允许键值重复。

15.hashtable本意是用空间换时间(不包含初始化的时间)。hash function目的是为了将很大的索引值映射为一个可以接收的索引。其解决碰撞问题的方式主要有:

  线性探测:如果该位置不可用,则线性向下寻找,直到找到可用空间。但是这种办法与期望的常数时间基本操作大相径庭。会产生主集团问题,即平均插入成本,远高于负载系数的成长幅度。

  二次探测:即增长为二次形式,是为了解决主集团问题所提出的,但其可能造成次集团问题,即两个元素计算出的位置相同,插入时所探测的位置也相同。

  开链:在每一个表格中维护一个List,在list上执行元素的插入搜寻和删除操作。

16. hashtable的桶子和节点:表格中的每个单元都不只是一个元素,可能是一桶元素。

17. unordered_map,unordered_set,unordered_multiset,unordered_multimap底层由hashtable实现,其效率和空间与红黑树实现的有一定差别,并且最大的不同是无序。

18.算法的泛型化,让整个算法工作在一个抽象的层面,就可以适配未知的数据结构了。

19.STL的sort算法,一般情况采用快速排序,即分段递归排序,在迭代层数过深时会采用堆排序,在分段后数据量过少的情况下采用插入排序。