我正在实现一种拓扑排序的变体,需要一个结构来保存没有入边的元素。无论是使用queue
还是stack
都可以完成这个任务,因为它们取出元素的顺序并不重要。问题是:它们中有一个比另一个快吗?
我正在实现一种拓扑排序的变体,需要一个结构来保存没有入边的元素。无论是使用queue
还是stack
都可以完成这个任务,因为它们取出元素的顺序并不重要。问题是:它们中有一个比另一个快吗?
queue
和stack
都是容器适配器,而不是完整的容器。
默认情况下,stack
和queue
都是基于std::deque
实现的,如果您没有更改此设置,则它们应该具有相似的性能。
这真的取决于您正在编写的应用程序类型,您可以选择基础容器,以最大程度地受益于您最需要的操作。
回答你的主要问题:我不知道。我认为它们中没有一个显着更快,因为对于 std::deque
(堆栈和队列的默认内部容器),push_back
和 push_front
(以及 pop_back
和 pop_front
)是对称的。没有一个应该更快。然而,我建议使用普通的 std::vector
,并使用 push_back
和 pop_back
,或等效地:
std::stack<T, std::vector<T>>
请点击 这里 查看为何栈默认使用双端队列。
虽然queue
和stack
在性能上并没有太大差异,但它们显然会引起不同的节点访问顺序。其中一个可能比另一个更符合缓存友好的顺序,这取决于节点在内存中的布局方式。
http://www.cplusplus.com/reference/stack/stack/pop/
http://www.cplusplus.com/reference/queue/queue/pop/
队列和栈是不同的。队列是先进先出,而栈是后进先出。