双端队列这个结构 ,总是作为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、