一、介绍
在C++中,deque
(双端队列)是一个序列容器,它提供了双端队列数据结构的功能
在常规队列中,元素从后面添加并从前面移除
然而,在deque
中,我们可以从前后两端插入和移除元素
对于vector
容器来说,push_front
的效率很低,但是对于deque
来说,push_front
和push_back
的插入效率为O(1)
- 与vector比较,头插效率高,不需要搬移元素
- 与list比较,空间利用率比较高
二、创建和初始化
deque
的初始化和vector
的初始化是类似的
deque<int>dq(10);
deque<int> dq {1, 2, 3, 4, 5};
三、常用方法
以下是一些常用的deque
方法:
push_front(g)
:在deque
的前面添加一个元素gpush_back(g)
:在deque
的后面添加一个元素gpop_front()
:移除deque
前面的元素pop_back()
:移除deque
后面的元素front()
:返回第一个元素back()
:返回最后一个元素begin()
:返回指向第一个元素的迭代器end()
:返回指向最后一个元素之后位置的迭代器rbegin()
:返回指向最后一个元素的反向迭代器rend()
:返回指向第一个元素之前位置的反向迭代器clear()
:移除所有元素size()
:返回元素数empty()
:如果deque
为空则返回真
四、deque的底层以及迭代器
在C++ STL中,deque
(双端队列)是通过数据数组或指向内存块的指针数组实现的,而不是通过链表。根据存储需求,块的数量和指针数组的大小会动态波动。这些内存块包含了相邻位置的元素
- deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维
数组
- 双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落
在了deque的迭代器身上
五、deque的缺点以及优点
优点
- 与vector比较,头插效率高,不需要搬移元素
- 与list比较,空间利用率比较高,底层是一段连续的空间
缺点
- 不适合遍历,遍历的时候,deque的迭代器需要不断地去检查是否已经到达某段小空间的边界
导致效率低下