stl源码剖析学习笔记(一)重点数据结构概览

stl源码剖析学习笔记(一)


本系列都是基于SGI STL.


1、vector


线性连续空间 capacity() size() empty()。  对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了

capacity()的实现是return size_type(end_of_storage - begin());

size()的实现是return size_type(end()-begin());

empty()的实现是return begin()==end();


end() return finish;

begin() return start;


begin() end()符合stl的前闭后开规范




2、list

双向循环链表


3、deque

双向开口‘连续’空间   其连续性是通过很多个map指针映射小块连续内存区域保证的,假连续。决定了其修改操作效率极低。连基本的排序,最好都先拷贝到vector中排序号再拷回来。应用场合?


4、stack、queue

stack先进后出,queue先进先出,结构连续简单。其底层结构是sequence


5、heap(不是stl的容器组件,是幕后英雄) 

找list中的极值,需要线性扫描list。stl用的是完全二叉树,而且是大顶堆。

此处可以引入堆的push、pop和sort算法介绍。

heap相关的push、pop和sort操作全部都在algorithm头文件内。


前五个均称为序列式容器,可序的,对序列性有一定需求。


关联式容器是Key-Value方式访问,对序列性无需求。

1、平衡二叉树/AVL树

2、红黑树

3、set/map/multiset/multimap

4、hashtable/hashset/hashmap/hashmultiset/hashmultimap

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值