2012-08-11 70 views
2

STL queuefront()back()方法,但stack只有top(),但不bottom()。为什么?不一致的STL容器适配器

+5

迂腐笔记,'queue'和'stack'不是容器。 – juanchopanza 2012-08-11 20:00:30

+2

因为它是一个堆栈。它有意限制在后进先出访问中,因为这就是栈的定义。队列是先入先出的,所以你需要*访问两端。 – 2012-08-11 20:01:27

+1

您可以轻松地添加'list'具有push_back和push_front,但'vector'仅具有push_back。在这种情况下,原因是您可以执行操作的效率。 – jahhaj 2012-08-11 20:03:04

回答

8

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

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

2

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

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