双端队列deque
普通的队列有许多限制,例如从一边删除插入,不能使用迭代器(因为空间不连续)等等。
双端队列就允许从两边插入
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
deque的成员函数:
deq[ ]:用来访问双向队列中单个的元素。
deq.front():返回第一个元素的引用。
deq.back():返回最后一个元素的引用。
deq.push_front(x):把元素x插入到双向队列的头部。
deq.pop_front():弹出双向队列的第一个元素。
deq.push_back(x):把元素x插入到双向队列的尾部。
deq.pop_back():弹出双向队列的最后一个元素。