📅  最后修改于: 2023-12-03 14:39:56.326000             🧑  作者: Mango
在 C++ 的标准模板库(STL)中,Queue 和 Deque 是两种非常常用的容器,它们都可以用来实现队列(先进先出)的数据结构。但它们之间还是有一些区别的。
Queue 是一种基于 Deque 的适配器容器,它是一种先进先出(FIFO)的容器。它的定义如下:
template <class T, class Container = deque<T>> class queue;
Queue 的底层容器可以是任意一种 Sequence 容器,但默认情况下是 Deque。因此,Queue 的所有成员函数都是对底层 Deque 容器的封装,在 Deque 的基础上实现了队列的操作。
以下是 Queue 的一些基本操作:
push()
:在 Queue 的末尾添加元素。pop()
:移除 Queue 的头部元素。front()
:返回 Queue 头部的元素(但不删除)。back()
:返回 Queue 末尾的元素(但不删除)。size()
:返回 Queue 中元素的个数。empty()
:如果 Queue 为空,返回 true
,否则返回 false
。Deque 是一种双端队列容器,它支持在头和尾部插入和删除元素,类似于一个向两个方向扩展的 Vector。它的定义如下:
template <class T, class Allocator = allocator<T>> class deque;
Deque 的底层数据结构是一个环形的缓冲区,这个缓冲区又由多个页(一般是每页512 bytes大小)组成,每一页也相当于一个vector容器,deque本身只是维护了一个缓冲区描述的一个头部和尾部位置而已。
以下是 Deque 的一些基本操作:
push_front()
:在 Deque 的头部插入元素。push_back()
:在 Deque 的尾部插入元素。pop_front()
:移除 Deque 的头部元素。pop_back()
:移除 Deque 的尾部元素。front()
:返回 Deque 头部的元素(但不删除)。back()
:返回 Deque 末尾的元素(但不删除)。size()
:返回 Deque 中元素的个数。empty()
:如果 Deque 为空,返回 true
,否则返回 false
。Queue 适合在只需要在一端插入、另一端删除的场景中使用,而 Deque 则适合需要在头尾插入和删除元素的场景中使用。无论使用哪种容器,都可以使用 STL 提供的常用函数(如 size()
、empty()
等)来访问和操作容器中的元素。