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