1

为什么我要使用 a std::stackor astd::queue而不是 a std::vectoror a std::deque

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

4

3 回答 3

5

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

std::stackstd::vector您要实现的容器真正是LIFO.

于 2016-06-03T06:36:24.770 回答
3
  1. 为了方便。它们提供了针对需求量身定制的语义 API。

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

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

于 2016-06-03T06:28:46.323 回答
1

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

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

于 2016-06-03T06:46:44.353 回答