队列和堆栈是被广泛提及的结构。但是,在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_backand 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其全部功能。