deque即双端队列,似乎并不常用,但是stack、queue都是默认使用deque实现的,所以还是有必要学习一下deque,了解其基本实现,这样对于stack、queue,也能有更深入的理解;
deque特点
deque和vector非常相似,它也使用动态数组来管理元素,接口也和vector相差无几,不同的是,deque首尾都开放,因此能在两端进行快速安插与删除;
deque使用动态扩展,那么是怎样实现的呢?deque通常作为一组独立区块,第一区向某方向扩展,最后一个区块朝另一个方向扩展,如下图所示:
deque与vector比较
由于deque和vector十分类似,所以我们只需要和vector进行类比学习就可以了,与vector相比,deque存在以下不同:
- deque两端都能快速安插,而vector只在尾端;
- 存取元素时,deque内部结构会多一个间接过程,所以元素的存取和迭代器的动作会稍慢一点;
- deque不支持对容量和内存重新分配时机的控制,所以不提供capacity()和reserve()函数;但是deque的内存分配优于vector,因为其不必再内存重新分配时复制所有元素;
- deque除了首尾两端,任何地方安插删除元素,都有可能导致元素的指针、迭代器、引用失效;
- deque的内存块不被使用时,会被释放,其内存大小是可缩减的,但是vector则不支持;
- deque提供push_front()和pop_front函数;
至于其他,deque和vector基本相同,这里不再赘述;