2012-08-11 68 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()。