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