在许多非官方的C ++参考网站中,列出了std::queue
的成员函数front()
和back()
。但是,std::stack
只有top()
个功能。
堆栈没有bottom()
函数是有意义的,因为这是堆栈的定义。
我没有得到的是为什么C ++标准委员会选择不遵循队列的定义并为队列提供back()
函数,并选择遵循堆栈的定义而不提供{ {1}}功能。
答案 0 :(得分:7)
back()
可能还有其他原因,但你需要它来为队列,因为C ++ 03中的习惯用法将“空”对象廉价复制到容器中,然后swap
ping具有“完整”对象的新元素,复制起来非常昂贵。由于移动语义,这个原因在C ++ 11中或多或少已经过时,但当然仍然需要back()
来兼容。
对于该(或任何其他)原因,您不需要bottom()
堆栈。
答案 1 :(得分:1)
它实际上以一种奇怪的方式有意义。在队列中,你在一侧推动并从另一侧弹出,因此双方很可能会发生很大的变化。使用堆栈,您可以从顶部推送和弹出,并且堆栈的底部很少更改。因此,查询堆栈底部的当前值很少有趣。