关于SO的众多答案和评论声称使用std::stack
几乎没用,但除了"使用std::vector
或{{1}之外,不要给出其他理由。而不是。"
为什么呢?它有什么问题?
索赔证据:
答案 0 :(得分:10)
有一种说法是这样的:
不要诱惑别人去做你不希望他/她做的事情。
堆栈是一个定义明确的数据结构。它的行为很好地由std::stack
实现。
如果你需要的只是一个堆栈而不再是,那么请转到std::stack
。它将帮助您坚持数据结构的目的,并使您的程序更清晰易懂,更易于维护。
但是,请尝试评估您是否需要比堆栈提供的更多功能。
例如,如前所述,支持std::deque
或std::vector
的充分理由是迭代器。
在所有情况下,作为使用std :: stack几乎没用的事实的证据,它是一个额外的功能(超出堆栈),这促使放弃std::stack
赞成另一个容器。
答案 1 :(得分:0)
让我们说std :: stack并不是没有用的,但是只有满足以下条件之一才是合理的选择:
基本上std :: stack缺少任何种类的迭代器接口,意味着它不能与任何标准算法一起使用,如果这对您来说是一个问题,则可以使用被视为堆栈的矢量或自己滚动堆栈模板。