哪个更快:STL队列还是STL堆栈?

时间:2013-03-31 19:57:31

标签: c++ performance stl stack queue

我正在实现一个toposort的变体,它需要一个结构来保存没有传入边的元素。 queuestack似乎都可以用于此目的,因为它们被取出的顺序无关紧要。问题是:它们中的任何一个都明显快于另一个吗?

5 个答案:

答案 0 :(得分:2)

queuestack都是容器适配器,而不是完整的容器。 默认情况下,stackqueue都在std::deque之上实现,如果您不更改此设置,它们应该具有相似的性能。

这实际上取决于您编写的应用程序类型,您可以选择有利于您最想要的操作的基础容器。

答案 1 :(得分:2)

回答你的主要问题:我不知道。我不认为它们中的任何一个明显更快,因为对于std::deque(堆栈和队列的默认内部容器),push_back和push_front(以及pop_back和pop_front)是对称的。没有人应该更快。不过我会建议使用普通的旧std :: vector与push_backpop_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)

虽然queuestack在性能上没有太大差异,但它们显然会引发不同的节点访问顺序。其中一个可能提供比另一个更多的缓存友好顺序,具体取决于您的节点在内存中的布局方式。

答案 4 :(得分:-3)

队列和堆栈是不同的。 首先是FIFO,堆栈是FILO