什么时候更喜欢堆栈/队列而不是deque?

时间:2013-11-28 03:20:57

标签: c++ stack queue deque container-classes

我知道堆栈/队列是使用deque作为其默认底层容器的容器适配器。但是,当我们可以将deque用作堆栈或队列时,为什么会麻烦?而且我没有看到我们必须使用堆栈/队列以及除了deque之外的不同底层容器的情况。此外,堆栈/队列(具有底层deque)是否比deque花费更多的内存? (数据结构更复杂,所以它必须做,对吧?)。如果是这样,那么如果数据量很大,那么差异会很大吗?

修改:为什么此问题被标记为重复且已链接到 c++ deque vs queue vs stack?我没有问到双端队列和队列之间的区别(正如我已经知道的那样)。我问为什么不使用deque作为堆栈/队列而不是使用类堆栈/队列,以及其他一些关于内存消耗的问题。

2 个答案:

答案 0 :(得分:3)

如果您需要堆叠或队列,则使用正确的容器。它们旨在防止deque允许的某些操作,例如在中间添加或删除元素,甚至迭代容器。在严格的堆栈或队列实现中,这样的操作是完全不可接受的。

您可能认为很好使用deque,因为知道您打算将其用作普通队列。但是当几年后其他人出现并且您的项目显着增长时,对于那个人来说可能并不明显。仅仅因为他们可以解决其他问题而执行非队列操作,您的程序可能会无意中被破坏,可能会在数周,数月或数年内未被发现。

答案 1 :(得分:2)

容器适配器用于接口。是的,您可以直接使用std::deque,但您不必担心大部分底层容器,而是拥有堆栈/队列的接口(行为)。适配器适应容器以提供某种行为,并且它使得更容易根据数据结构(即堆栈或队列)进行思考。对于stackqueue容器适配器,接口是底层容器提供的受限子集,这也可以防止错误或使用容器,而不是'打算。