当我们已经拥有更强大的向量时,为什么还需要堆栈?

Why do we need stacks when we already have vectors which are even more powerful?

在 C++ STL 中,堆栈是使用重写 Vector 接口的容器适配器实现的 class。但是,既然已经有Vectorclass,为什么还要重写接口,设计一个Stackclass呢?是因为成本效率,即维护堆栈使用更少的资源,同时它可以完成所有必要的工作?

容器适配器背后的想法是在一个开放的容器类型上强制执行特定的抽象数据类型。如果你有一个std::vector,有可能不小心在中间插入了insert/erase/access个元素;但是如果你有一个 std::stack 你就知道那不会发生。它类似于const:你告诉编译器要应用什么限制,以便它在你不小心违反它们时告诉你。

IME,人们并不经常使用 stackqueuepriority_queue 更有用。但在每一种情况下,人们往往会发现奇怪的特殊情况,您需要稍微打破规则,这意味着放弃过于原则化的容器适配器。

既然我们已经有了更强大的goto,为什么还需要for循环和while循环?您应该坚持简约原则 - 使用功能最少但功能强大的工具来实现所需的 objective.

如果您需要的是堆栈,请依赖提供该功能的标准库 class,而不是更强大的标准库。它还可以更好地向阅读您的代码的人传达您将要做什么。