deque的分析

本文详细解析了deque数据结构的特点及其实现原理,对比vector,deque支持高效的双端插入和删除操作。通过介绍其内部机制如T** map的使用、内存分配策略等,帮助读者深入理解deque的工作方式。

首先,deque跟vector一样都是支持随机访问的,但是deque跟vector不一样的是deque可以双端进行插入和删除,但是vector不行,表面上看起来这两者数据结构差不错但是实际上相差很大。

首先我们假设deque是存取 T类型的数据。

它包含了一个T** 类型的指针,这个指针里面内容T*指向一段T类型的存取空间,如果大家看了前面的第二级内存分配就应该可以知道原理是一致的。

T** map;

所以当我们的一段指向T类型的空间不够时,我们要做的并不是像vector一样,重新分配一个更大的空间,然后把旧的空间内容复制到新的空间去,再销毁就的空间。在deque里面我们要做的只是重新分配一段空间,把这段空间的指针交给我们的T** map就可以了,我们通过map来统一的映射这段地址。

所以在deque里面我们必须有这些内容:

T**  map;

T*(iterator)  start,finish;//指向开始的和结尾的元素。

size_t   size_map;//我们map 的大小。用于分析,map是否用完,以便重新分配一段新的map

size_t   size_buf;//map中每个元素指向的存取T类型数据的空间,这段空间应该大小是固定的,以便统一管理。在STL中,他是通过模板直接提供的,然后调用全局函数 _deque_buf_size得到。

malloc_map(); remalloc_map();//分配map空间

malloc_buffer();dealloc_buffer();//分配map映射的空间和释放空间

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值