普通的队列有许多限制,例如从一边删除插入,不能使用迭代器(因为空间不连续)等等。
双端队列就允许从两边插入

deque的特点:

1、支持随机访问,即支持[]以及at(),但是性能没有vector好。

2、可以在内部进行插入和删除操作,但性能不及list。

deque和vector的不同之处:

1、两端都能够快速插入和删除元素。vector只能在尾端进行。

2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个间接过程。

3、迭代器是特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。

4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。

5、不支持对容量和内存分配时机的控制。

注意:在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。

迭代器属于随机存取迭代器。

以上都是复制粘贴的,从以上我们可以看出它与vector相似,不同在于它可以从两头插入,这样插入效率高,如果从中间插入,要把很多元素都移动一遍,效率低

格式: deque<类型> 标识符

当生成一个 deque 容器时,也可以用由两个迭代器标识的一段元素来初始化它:

std::deque words_part { std::begin(words),std::begin(words) + 5 };

deque的成员函数:

deq[ ]:用来访问双向队列中单个的元素。

deq.front():返回第一个元素的引用。

deq.back():返回最后一个元素的引用。

deq.push_front(x):把元素x插入到双向队列的头部。

deq.pop_front():弹出双向队列的第一个元素。

deq.push_back(x):把元素x插入到双向队列的尾部。

deq.pop_back():弹出双向队列的最后一个元素。