我正在实现一个toposort的变体,它需要一个结构来保存没有传入边的元素。 queue
和stack
似乎都可以用于此目的,因为它们被取出的顺序无关紧要。问题是:它们中的任何一个都明显快于另一个吗?
答案 0 :(得分:2)
queue
和stack
都是容器适配器,而不是完整的容器。
默认情况下,stack
和queue
都在std::deque
之上实现,如果您不更改此设置,它们应该具有相似的性能。
这实际上取决于您编写的应用程序类型,您可以选择有利于您最想要的操作的基础容器。
答案 1 :(得分:2)
回答你的主要问题:我不知道。我不认为它们中的任何一个明显更快,因为对于std::deque
(堆栈和队列的默认内部容器),push_back和push_front(以及pop_back和pop_front)是对称的。没有人应该更快。不过我会建议使用普通的旧std :: vector与push_back
和pop_back
,或等效
std::stack<T, std::vector<T>>
请参阅here了解堆栈默认使用deque的原因。
答案 2 :(得分:1)
他们都有不变的复杂性...你只需要计时它来确定是否有更高的常数
http://www.cplusplus.com/reference/stack/stack/pop/
http://www.cplusplus.com/reference/queue/queue/pop/
答案 3 :(得分:1)
虽然queue
和stack
在性能上没有太大差异,但它们显然会引发不同的节点访问顺序。其中一个可能提供比另一个更多的缓存友好顺序,具体取决于您的节点在内存中的布局方式。
答案 4 :(得分:-3)
队列和堆栈是不同的。 首先是FIFO,堆栈是FILO