繁体   English   中英

为什么 std::stack 被认为是无用的?

[英]Why is std::stack considered useless?

许多关于 SO 的答案和评论声称使用std::stack几乎没有用,但除了“使用std::vectorstd::deque代替”之外,并没有真正给出其他理由。

为什么? 它出什么问题了?

索赔证据:

有句话是这样说的:

不要诱使某人做您不希望他/她做的事情。

堆栈是一种定义良好的数据结构。 它的行为由std::stack很好地实现。

如果您只需要一个堆栈,仅此而已,那么请选择std::stack 它将帮助您坚持数据结构的目的,并使您的程序更清晰易懂且更易于维护。

但是尝试评估您是否需要比堆栈提供的更多功能。

例如,如前所述,支持std::dequestd::vector一个很好的理由是迭代器。


在所有情况下,作为使用 std::stack 几乎没有用的事实的证据,正是这种附加功能(超出堆栈的功能)促使放弃std::stack以支持另一个容器。

假设 std::stack 不是无用的,但只有在以下情况之一为真时它才是合理的选择:

  1. 您不介意使用原始循环而不是习惯性地使用标准算法。
  2. 您永远不需要在代码中的单个函数、方法或语义单元中一次处理多个堆栈项。

基本上 std::stack 缺少任何类型的迭代器接口意味着它不能与任何标准算法一起使用,如果这对您来说是一个问题,那么使用您视为堆栈的向量或滚动您自己的堆栈模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM