C++学习22:容器深度探索之deque源码剖析及容器适配器

1 deque的内部结构

deque宏观上看是一种双向的vector,但源码并非如此。代码实现方式是分段串接,故是分段连续的。
在这里插入图片描述
如图,buffer是缓冲区,存储着数据。
对于deque,本质是一个存着指针的vector。图中例子存着5个指针,指向5段缓冲区,就是这5段数据。(vector中存的指针在中间位置)。
无论向前还是向后push数据,当一个缓冲区用完后,会新分配一个缓冲区并用新的指针指向它。
在这里插入图片描述
其源码如下:
在这里插入图片描述

2 deque的迭代器

deque的迭代器是一个类,要存4个指针。如下图所示:
在这里插入图片描述
其中,cur是现在所指向的位置,而node指向“控制中心”,即指向1中所说的vector中指向这一buffer指针的位置。这样,当迭代器要++或–时,它才可以通过控制中心跳到另一个buffer中去
first和last是标示着这个buffer的边界的位置。当++或–到了边界时,就应该跳到下一个缓冲区,方式是每一次移动进行边界判断,当达到边界时,通过node指向控制中心并跳到下一个buffer。
源码如下:
在这里插入图片描述

3 deque::insert()

insert函数的含义是:可以在一个指定的位置position,安插一个特定的元素x。在deque中,一个巧妙的操作是可以选择向前插还是向后插。
在这里插入图片描述
关于insert_aux函数,如下图所示:
在这里插入图片描述

4 deque模拟连续空间

在这里插入图片描述
模拟连续空间需要迭代器进行很多的操作符重载:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 新版本结构

在这里插入图片描述
对deque进行一个总结:
在这里插入图片描述

6 容器适配器

适配器不能遍历,没有迭代器。
stack和queue,让他内含deque,封装其一些功能即可达到。是一种什么设计模式来着。。。
在这里插入图片描述
在这里插入图片描述
不光deque可以实现stack和queue,只要有以上操作的都是可以的,但效率一定是不如deque的。下面用list做一个示范:
在这里插入图片描述
下面再看其他的一些示范:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值