【问题标题】:When to prefer stack/queue over deque? [duplicate]何时更喜欢堆栈/队列而不是双端队列? [复制]
【发布时间】:2013-12-13 23:02:41
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-11-18
        • 2014-10-14
        • 2019-04-13
        • 2011-07-17
        • 2018-05-09
        • 1970-01-01
        • 2012-04-17
        • 2021-03-17
        • 2014-04-21
        相关资源
        最近更新 更多