【问题标题】:Why is not possible to have a queue implemented as a vector?为什么不能将队列实现为向量?
【发布时间】:2021-12-31 14:02:26
【问题描述】:

使用 std::vector 模拟队列有什么缺点?我天真地认为 push_back 用于 push 和 pop 只是存储第一个元素的位置并增加它。为什么 std::queue 原则上不允许这样的 std::vector 实现(我知道原因是它没有 push_front 方法,但也许有更深层次的东西使它变慢)?感谢您的帮助。

【问题讨论】:

  • 一个vector只有对vector的back有push和pop操作,而一个queue需要在一端push和从另一端pop。可以使用其他函数(如 inserterase)创建队列,但 std::queue 在底层容器上使用推送和弹出操作。
  • “我天真地认为 [...]” -- 你可能想继续往下想,只做存储第一个位置的工作元素到底层容器。如果您计算出一些技术细节,您可能会发现您的“增强矢量”类似于deque所以,好主意。

标签: c++ vector stl queue implementation


【解决方案1】:

为什么 std::queue 不允许这样的 std::vector 实现

std::queue 是一个简单的容器适配器。它通过将pop 函数委托给底层容器的pop_front 函数来工作。 Vector没有pop前置操作,所以std::queue无法适配。

但也许有更深层次的东西使它变慢

从向量的前面推送和弹出很慢,因为它必须移动所有具有线性成本的元素。这就是vector不提供pop_front的原因。

存储第一个元素的位置并增加它。

可以实现一个将第一个元素的位置存储在缓冲区中的容器,但 vector 不是这种容器的实现。存储该位置会产生向量不需要支付的开销,因此不需要。

【讨论】:

    猜你喜欢
    • 2017-01-12
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2023-04-03
    相关资源
    最近更新 更多