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

bar*_*233 2 c++ stack containers vector data-structures

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

Ham*_*ite 10

当我们已经有了功能更强大的 goto 时,为什么还需要 for 循环和 while 循环呢?您应该遵循简约原则——使用功能最弱但功能强大的工具来实现预期目标。

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

  • “沟通”这一点非常好。如果我正在调试声明“std::vector<int> stack”的代码块,我不一定会假设代码将其严格视为堆栈。如果它声明了 `std::stack<int> stack`,我可以相信它。 (2认同)

Sne*_*tel 6

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

IME,人们并不真正使用stack并且queue经常使用。priority_queue比较有用一点。但在每种情况下,人们往往会发现奇怪的特殊情况,您需要稍微打破规则,这意味着放弃过于原则性的容器适配器。