队列和堆栈是被广泛提及的结构。但是,在C ++中,对于队列,您可以通过两种方式进行:
#include <queue>
#include <deque>
但是对于堆栈,您只能这样做
#include <stack>
我的问题是,队列和双端队列有什么区别,为什么要提出两种结构?对于堆栈,可以包括任何其他结构吗?
Answers:
Moron / Aryabhatta是正确的,但多一点细节可能会有所帮助。
队列和堆栈是比双端队列,向量或列表更高级别的容器。我的意思是,您可以在低层容器中建立队列或堆栈。
例如:
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
将使用双端队列作为基础容器构建一个int堆栈,并使用一个列表作为基础容器构建一个double队列。
您可以将其s
视为受限双端队列和q
受限列表。
所有必要的是较低级别的容器实现较高级别的容器所需的方法。这些back()
,push_back()
和pop_back()
堆栈和front()
,back()
,push_back()
,和pop_front()
队列。
关于双端队列,它不仅是可以在两端插入的队列。特别是,它具有随机访问权限operator[]
。这使其更像一个向量,但它是一个向量,您可以在其中以push_front()
and开头插入和删除pop_front()
。
有关详细信息,请参见双端队列。
Queue
:您只能在一端插入,而从另一端移开。
Deque
:您可以从两端插入和移除。
因此,使用一个Deque
,你可以模拟Queue
以及一个Stack
。
提示:
Deque
是短期的“ d ouble ê nded阙UE”。
queue
不满足容器的要求。为了天堂,它没有迭代器!
std::stack
使用astd::deque
作为后备容器。我在这里推测原因:stackoverflow.com/questions/102459/…(基本上,增长adeque
的开销很低)。
在C ++库中,std::stack
和std::queue
都实现为容器适配器。这意味着它们分别提供堆栈或队列的接口,但它们本身都不是容器。取而代之的是,他们使用其他一些容器(例如std::deque
或std::list
实际存储数据),并且std::stack
该类仅具有少量代码即可转换push
并pop
与push_back
和转换pop_back
(并且std::queue
大致相同,但使用push_back
and pop_front
)。
queue
,VS似乎也映射pop
到pop_front
,而push
到push_back
了,所以我想这是实现相关。
pop_front
并push_back
有什么要求。我很抱歉。
优先队列出队是根据某些排序(优先级)比较而不是入队顺序发生的。
例如,您可以将定时事件存储在一个要首先拉出最快事件并查询其计划时间的地方,以便您可以休眠到该时间点。
优先级队列通常使用堆来实现。
迈克·安德森(Mike Anderson)在这里:https:
//www.quora.com/What-is-the-difference-between-a-priority-queue-and-a-queue
stack
并queue
限制deque
其全部功能。