STL中各个容器的实现基本原理以及互相依赖

STL中一共拥有六大组件:

1.算法 2.迭代器 3.容器. 4.仿函数 5.适配器(配接器)6.空间配置器


通过阅读侯捷版本的《STL源码剖析》可以知道,STL的实现也是由基本的数据结构来完成的


容器大概可以分为关联型容器和序列型容器,

序列型容器有vector,list,deque,queue,stack,slist,heap,priority_queue

vector由数组实现,当现有数组容量不足时,申请新的内存,每次新增一倍当前容量的内存。

deque翻译为双端队列,但它由一个中央控制器(map——此map非彼map)负责实现,deque的数据保存在零零散散的多个固定长度的数组中,而map中保存着一个指针,指针分别指向这些数组,deque先从map的中间位置(因为是双端队列,故各个指针是由中间向两端依次排开)获取指针,然后移动到具体的数组中存放数据。当数组不够用时,申请新的数组并在map中记载指针,当map也不够时,申请新的map,并且将原有的Map拷贝至新申请的map中来。因此map的复杂度大于vector。


stack、queue基于deque;

heap:完全二叉树,使用大顶堆实现,然后进行排序,以vector的形式存放

priority_queue:基于heap

list:双向环形链表

slist::单链表

关联式容器:
set,map,multiset,multimap-基于红黑树(RB-tree),一种加上了额外平衡条件的二叉搜索树。
hash table-散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值(碰撞问题,可以用线性探测,二次探测来解决),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。
hash_map,hash_set,hash_multiset,hash_multimap-基于hash table。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值