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

C++ 什么时候更喜欢堆栈/队列而不是deque?,c++,stack,queue,deque,container-classes,C++,Stack,Queue,Deque,Container Classes,我知道stack/queue是使用deque作为其默认底层容器的容器适配器。但是,当我们可以将deque用作堆栈或队列时,为什么会有麻烦呢?我也不认为我们必须使用堆栈/队列来处理除deque之外的不同底层容器的情况。此外,堆栈/队列(具有底层deque)是否比deque占用更多内存?(数据结构更复杂,所以必须这样做,对吗?)。如果是这样的话,那么如果数据巨大,差异是否很大 编辑:为什么此问题被标记为重复问题并链接到 ? 我没有问deque和queue之间的区别(我已经知道)。我问为什么不使用de

我知道stack/queue是使用deque作为其默认底层容器的容器适配器。但是,当我们可以将deque用作堆栈或队列时,为什么会有麻烦呢?我也不认为我们必须使用堆栈/队列来处理除deque之外的不同底层容器的情况。此外,堆栈/队列(具有底层deque)是否比deque占用更多内存?(数据结构更复杂,所以必须这样做,对吗?)。如果是这样的话,那么如果数据巨大,差异是否很大

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

容器适配器用于其接口。是的,您可以直接使用
std::deque
,但在大多数情况下,您不必担心底层容器,而是有一个用于堆栈/队列的接口(行为)。适配器调整容器以提供特定的行为,从而更容易根据数据结构(即堆栈或队列)进行思考。对于
堆栈
队列
容器适配器,接口是底层容器提供的受限子集,这也可以防止错误或以非预期方式使用容器。

如果需要堆栈或队列,则使用正确的容器。它们被设计成防止某些操作允许在<代码> DeQue/COD>中进行,例如在中间添加或删除元素,甚至迭代通过容器。在严格的堆栈或队列实现中,这样的操作是完全不可接受的

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