为什么使用 std::stack 或 std::queue?
Why use std::stack or std::queue?
为什么我要使用 std::stack
或 std::queue
而不是 std::vector
或 std::deque
?
既然容器适配器只是标准容器的包装器,为什么还要使用它们呢?
为了方便。它们提供了根据需求量身定制的语义API。
可读性。 stack.top()
比 stack[0]
、stack[stack.size()]
* 或 stack.back()
看起来更好。 Reader 此类代码不需要解释此类构造的含义。给了。
*注意:正如 @moooeeeep 建议它应该是 size()-1
如果有的话,但我将原始作为一个很好的例子,为什么人们应该使用提供的解决方案而不是手工编写最简单的东西.
To limit the user interface
您不希望您的堆栈能够在其他地方而不是顶部移除元素。如果性能完全相同,为什么要使用 vector 代替堆栈,堆栈还可以提高可读性和可靠性。
当您要实现的容器确实是 LIFO
. 时,std::stack
比 std::vector
更具表现力
std::stack
是容器的适配器(可以是向量,whatsnut 容器列表)。主要目的是将底层容器的接口转换为堆栈的接口。这样给你 push()
、top()
和 pop()
而不是 push_back()
、back()
和 pop_back()
.
队列和双端队列遵循相同的方案。队列是一种可能操作较少的双端队列。
为什么我要使用 std::stack
或 std::queue
而不是 std::vector
或 std::deque
?
既然容器适配器只是标准容器的包装器,为什么还要使用它们呢?
为了方便。它们提供了根据需求量身定制的语义API。
可读性。
stack.top()
比stack[0]
、stack[stack.size()]
* 或stack.back()
看起来更好。 Reader 此类代码不需要解释此类构造的含义。给了。
*注意:正如 @moooeeeep 建议它应该是 size()-1
如果有的话,但我将原始作为一个很好的例子,为什么人们应该使用提供的解决方案而不是手工编写最简单的东西.
To limit the user interface
您不希望您的堆栈能够在其他地方而不是顶部移除元素。如果性能完全相同,为什么要使用 vector 代替堆栈,堆栈还可以提高可读性和可靠性。
LIFO
. 时,std::stack
比 std::vector
更具表现力
std::stack
是容器的适配器(可以是向量,whatsnut 容器列表)。主要目的是将底层容器的接口转换为堆栈的接口。这样给你 push()
、top()
和 pop()
而不是 push_back()
、back()
和 pop_back()
.
队列和双端队列遵循相同的方案。队列是一种可能操作较少的双端队列。