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

时间:2016-06-03 06:26:13

标签: c++ stack containers stdvector stddeque

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

由于容器适配器只是标准容器周围的包装器,为什么要使用它们呢?

3 个答案:

答案 0 :(得分:5)

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

当您要实施的容器确实是std::stack时,

std::vectorLIFO更具表现力。

答案 1 :(得分:3)

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

  2. 可读性。 stack.top()看起来比stack[0]stack[stack.size()] *或stack.back()好。这种代码的读者不需要解释这种构造的含义。它是给出的。

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

答案 2 :(得分:1)

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

队列和双端队列遵循相同的方案。队列是一个可以减少操作的双端队列。