侯捷《STL源码剖析》 | 容器详解 Deque(史上最简明介绍)

本文详细解析了C++ STL中的双端队列Deque,包括其内部结构、迭代器的工作原理、insert操作的实现以及操作符重载的细节。此外,还介绍了如何利用Deque构建queue和stack容器,展现了Deque在适配器模式中的应用。
摘要由CSDN通过智能技术生成

Deque

Deque为双端队列,提供双端进出的操作,特点如下:

  • 包含一个map链表,用来将存放元素的多个缓冲区“连接”起来,使用者使用时像是拥有了连续空间。
  • 包含start、finish两个迭代器和一个pointer指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqqLGoTz-1589895151116)(6_13.jpg)]
Deque的实现:

在这里插入图片描述

Deque的iterator

deque迭代器的设计比较精巧,包含node、first、last、cur四个指针。特定如下:

  • 若_Duque_iterator中node指向某个缓冲区,first指向buffer开端,last指向buffer末端,cur指向buffer存元素的位置。
  • 对于start迭代器,其cur指向buffer存元素的开头;对于end迭代器,其cur指向buffer存元素的末尾。
  • 用于遍历的iterator的cur指向buffer中的当前访问元素,当iterator走到buffer边界时,要有能力跳到下一个buffer,通过map中的node实现。

在这里插入图片描述

insert操作

开头插入调用push_front();末尾调用push_back();中间调用insert_aux();

在这里插入图片描述

insert操作会计算插入位置position到首尾的距离,在尽量减少元素移动的情况下加入。

在这里插入图片描述

deque操作符的重载

  • 操作符 [ ]
reference operator[](size_type n){
   
	return start[difference_type(n)];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值