C++中deque的底层讲解

1.前言

1.了解过queue和stack底层的或许了解过,库里面的底层实现,选择的默认容器就是deque,那他有什么好处呢?

 2.先前了解过deque的接口会发现,他感觉像是vector和list的合体,什么接口都有:
C++中deque的底层讲解_第1张图片

 很强,但是它的底层效率怎么样呢?

2.底层的实现图解:

C++中deque的底层讲解_第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.

C++中deque的底层讲解_第3张图片

 C++中deque的底层讲解_第4张图片

 3.deque的迭代器实现的大致图解

它是用四个指针来维护它的

C++中deque的底层讲解_第5张图片

你可能感兴趣的:(c++,开发语言)