当堆栈没有底层函数时,为什么C ++标准队列有后退功能?

时间:2014-02-01 22:34:17

标签: c++ stack queue std

在许多非官方的C ++参考网站中,列出了std::queue的成员函数front()back()。但是,std::stack只有top()个功能。

堆栈没有bottom()函数是有意义的,因为这是堆栈的定义。

我没有得到的是为什么C ++标准委员会选择不遵循队列的定义并为队列提供back()函数,并选择遵循堆栈的定义而不提供{ {1}}功能。

2 个答案:

答案 0 :(得分:7)

back()可能还有其他原因,但你需要它来为队列,因为C ++ 03中的习惯用法将“空”对象廉价复制到容器中,然后swap ping具有“完整”对象的新元素,复制起来非常昂贵。由于移动语义,这个原因在C ++ 11中或多或少已经过时,但当然仍然需要back()来兼容。

对于该(或任何其他)原因,您不需要bottom()堆栈。

答案 1 :(得分:1)

它实际上以一种奇怪的方式有意义。在队列中,你在一侧推动并从另一侧弹出,因此双方很可能会发生很大的变化。使用堆栈,您可以从顶部推送和弹出,并且堆栈的底部很少更改。因此,查询堆栈底部的当前值很少有趣。