双端队列这个结构 ,总是作为stack和queue容器适配器的默认模板参数类型,它的功能很丰富,头删头插,尾插尾删,随机存取等等,看起来就是vector和list的合体。为什么这么说呢?
| 优点 | 缺点 | |
|---|---|---|
| vector | 1.随机访问 2.尾插 | 头、中部插入删除 |
| list | 任意位置插入删除 | 随机访问 |
那么在功能上,我们可以清楚的看到 deque = vector+list
真的是这样么?
结论:
1.deque不能替代vector和list
2.deque采用operator [ ] 来支持随机存取,但不适合大量的随机访问和中间的插入删除
3.deque作为栈和队列的默认适配容器 原因:栈和队列涉及头尾操作。
list当然也可以作为栈和队列的容器,但追究到deque底层我们可以得到,deque是多个连续的空间,而list是单个空间,这样,deque会使空间缓存利用率更好。
那究竟deque的底层结构究竟是怎样的呢?我们移步至源码看看吧
这是deque大致的物理结构

start和finish 作为迭代器,它的结构体内包含了四个变量:
cur、first、last、node
其中还有一个map,它叫做中控的指针数组:这个map中存的是每一个存数据的数组的起始地址。
当然我们开辟了几个数组 还需要用 map_size来记录。
每个数组中存储的是

本文探讨了C++中的双端队列deque,它结合了vector和list的功能,如头删头插、尾插尾删和随机存取。然而,deque并不能完全替代vector和list,因为其随机存取效率不高且不适合大量中间插入删除。deque作为栈和队列的默认容器,得益于其内部结构——多个连续空间,提供更好的空间缓存利用率。通过分析deque的底层结构,包括迭代器start和finish以及内部的中控指针数组,可以更深入地理解deque的工作原理。
最低0.47元/天 解锁文章
346

被折叠的 条评论
为什么被折叠?



