【发布时间】:2019-04-13 02:50:06
【问题描述】:
我想知道为什么 C++ 有队列和堆栈,因为它已经有双端队列。
看来stack/queue的runtime和使用deque模拟stack/queue是一样的。此外,deque 支持诸如擦除、迭代器和随机访问之类的修饰符,而堆栈或队列都不支持这些修饰符。
既然双端队列比其他两个更强大,为什么 C++ 提供所有三个呢?
谢谢!
【问题讨论】:
-
它们不是相互排斥的。其实
std::stack和std::queue都默认使用std::deque。 -
有时少即是多。 stack 比 deque 像堆栈一样在程序中的作用更容易理解。
-
一种类型的“力量”通常是使用风险的代名词。更“强大”的功能使检测错误变得更加困难,因为根据定义,您不允许做的事情更少。一个典型的例子是 c 风格的演员表。它们在可以执行的转换方面非常强大,它们可以取代任何 c++ 风格的转换。但它们的力量也意味着它们使用起来很危险。因此,尽管它们使所有其他演员表变得多余,但特别不鼓励使用它们,因为它是如此强大。与其将
queue和stack视为“不那么强大”,不如将它们视为更安全。 -
@FrançoisAndrieux 说得好,我想补充一点,使用
queue和stack更具表现力。当堆栈是stack而队列是queue时,代码更容易推理
标签: c++ data-structures stl deque