【问题标题】:Inconsistency in STL container adaptersSTL 容器适配器不一致
【发布时间】:2012-08-11 19:56:58
【问题描述】:

STL queuefront()back() 方法,但 stack 只有 top(),但没有 bottom()。为什么会这样?

【问题讨论】:

  • 迂腐注意,queuestack 不是容器。
  • 因为它是一个堆栈。它有意限制为后进先出访问,因为这是定义堆栈的方式。队列是先进先出的,因此您需要访问两端。
  • 您可以很容易地添加 list 具有 push_back 和 push_front,但 vector 仅具有 push_back。在这种情况下,原因是您可以执行操作的效率。
  • @jahhaj:这是不同的——listvector 是容器,它们支持的操作取决于操作所需的算法复杂性。另一方面,queuestack 是容器适配器——它们被设计为具有非常有限的接口。
  • 我想问题是“为什么队列有一个back() 方法而没有允许你从后面删除该元素的方法”。

标签: c++ data-structures stl


【解决方案1】:

stack 的唯一原因是禁止访问被包装的容器,除非作为堆栈,即仅访问顶部。如果您想要一个可以用作堆栈但不限于仅用作堆栈的容器,那么您可以使用不同的序列容器,例如原始vector

同样,queue 的唯一原因是禁止访问被包装的容器,除非作为队列,即访问前后。如果您想要一个可用作队列但不限于仅用作队列的容器,则可以使用不同的序列容器,例如原始vector

【讨论】:

    【解决方案2】:

    队列通常表示先进先出 (FIFO) 缓冲区。您可以访问两端。一端有最新的项目,另一端有最旧的项目。您可能希望从将元素添加到队列的代码中访问最新的项目,并从处理队列中的项目的代码中访问最旧的项目。

    堆栈通常表示后进先出 (LIFO) 缓冲区。您只能访问一端,即最近添加到堆栈中的项目。所以只需要一个top(),没有bottom()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2019-09-26
      • 1970-01-01
      • 2021-12-04
      • 2018-04-01
      • 2019-05-24
      • 2011-07-24
      • 1970-01-01
      相关资源
      最近更新 更多