1 2 3 4

STL各容器的实现原理

STL共有六大组件

容器、算法、迭代器、仿函数、适配器、空间配置器

STL的实现是基于我们常见的数据结构

 

序列式容器:

vector:动态数组

list:双链表

deque:分配中央控制器map,map记录着一系列的固定长度的数组的地址。deque先从map中央的位置(因为双向队列,前后都可以插入元素)找到一个数组地址,向该数组中放入数据,数组不够时继续在map中找空闲的数组来存数据。当map也不够时重新分配内存当作新的map,把原来map中的内容copy的新map中。所以使用deque的复杂度要大于vector,尽量使用vector。

stack:基于deque

queue:基于deque

heap:完全二叉树,使用最大堆排序,以数组vector 的形式存放

priority_queue:基于heap

slist:单向链表

 

关联式容器

set、map、multiset、multimap:基于红黑树,一种加上了额外平衡条件的二叉搜索树

hash table:散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值(碰撞问题,可以用线性探测,二次探测来解决),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。

hash_map,hash_set,hash_multiset,hash_multimap:基于hash table

posted @ 2021-12-05 17:55  木木木999  阅读(182)  评论(0)    收藏  举报