1.前言
1.了解过queue和stack底层的或许了解过,库里面的底层实现,选择的默认容器就是deque,那他有什么好处呢?
2.先前了解过deque的接口会发现,他感觉像是vector和list的合体,什么接口都有:
很强,但是它的底层效率怎么样呢?
2.底层的实现图解:
1.效率问题:
相比vector:
1.极大的缓解了扩容问题 / 头插头删的问题
2.[] 不够极致, 计算在哪个buff,在哪个buff的第几个
operator[](size_t pos)
{
1.先看在不在第一个buffer数组,在就寻找位置
2.不在第一个buffer, i -= 第一个buffer数组size
第几个bufffer = i / buffer_size
在这个buffer的第几个 = i % buffer_size
}
相比list:
1.可以至此下标的随机访问
2.cpu高速缓存效率不错, 他是每一个buffer加的,但list每加一个数据都要加一个结构体。
3.头尾插入和删除都不错, 但是中间插入删除呢?---> 十分的拉跨
总结
高频的头插头删,尾插尾删是不是很合适?
所以deque用来适配stack和queue的默认容器就显得很合适了!因此库里面实现的stack和queue的默认容器就是deque.
3.deque的迭代器实现的大致图解
它是用四个指针来维护它的