为什么使用 std::stack 或 std::queue?

Why use std::stack or std::queue?

为什么我要使用 std::stackstd::queue 而不是 std::vectorstd::deque

既然容器适配器只是标准容器的包装器,为什么还要使用它们呢?

  1. 为了方便。它们提供了根据需求量身定制的语义API。

  2. 可读性。 stack.top()stack[0]stack[stack.size()]* 或 stack.back() 看起来更好。 Reader 此类代码不需要解释此类构造的含义。给了。

*注意:正如 @moooeeeep 建议它应该是 size()-1 如果有的话,但我将原始作为一个很好的例子,为什么人们应该使用提供的解决方案而不是手工编写最简单的东西.

To limit the user interface 您不希望您的堆栈能够在其他地方而不是顶部移除元素。如果性能完全相同,为什么要使用 vector 代替堆栈,堆栈还可以提高可读性和可靠性。

当您要实现的容器确实是 LIFO.

时,

std::stackstd::vector 更具表现力

std::stack 是容器的适配器(可以是向量,whatsnut 容器列表)。主要目的是将底层容器的接口转换为堆栈的接口。这样给你 push()top()pop() 而不是 push_back()back()pop_back().

队列和双端队列遵循相同的方案。队列是一种可能操作较少的双端队列。