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

时间:2015-09-27 16:48:46

标签: c++ stack

关于SO的众多答案和评论声称使用std::stack几乎没用,但除了"使用std::vector或{{1}之外,不要给出其他理由。而不是。"

为什么呢?它有什么问题?

索赔证据:

2 个答案:

答案 0 :(得分:10)

有一种说法是这样的:

  不要诱惑别人去做你不希望他/她做的事情。

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

如果你需要的只是一个堆栈而不再是,那么请转到std::stack。它将帮助您坚持数据结构的目的,并使您的程序更清晰易懂,更易于维护。

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

例如,如前所述,支持std::dequestd::vector的充分理由是迭代器。

在所有情况下,作为使用std :: stack几乎没用的事实的证据,它是一个额外的功能(超出堆栈),这促使放弃std::stack赞成另一个容器。

答案 1 :(得分:0)

让我们说std :: stack并不是没有用的,但是只有满足以下条件之一才是合理的选择:

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

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