容器介面卡

2021-07-23 23:51:26 字數 1929 閱讀 4697

標準庫定義了三個順序容器介面卡:stack、queue和priority_queue

容器、迭代器和函式都有介面卡,接受一種已有的容器型別,使其行為看起來像一種不同的型別

例如,stack介面卡接受乙個順序容器(除array和foward_list),並使其像乙個stack

容器介面卡支援的操作和型別

size_type

一種型別,儲存當前型別的最大物件的大小

value_type

元素型別

container_type

實現介面卡的底層容器型別

a a;

建立乙個名為a的空介面卡

a a(c); 

關係運算子

介面卡都支援所有關係運算子:==、!=、<、<=、>、>=這些運算子返回底層容器的比較結果

a.empty()

a.size()

返回a中的元素數目

swap(a,b)

交換a和b的內容,a和b必須有相同型別,包括底層容器型別也必須相同

a.swap(b)

定義乙個介面卡

定義兩個建構函式:

1)預設建構函式建立乙個空物件

2)接受乙個容器的建構函式拷貝該容器來初始化介面卡

satckstk(deq);//從deq(deque)拷貝元素到stk

預設情況,stack和queue基於deque實現,priority_queue是在vector之上實現

stack>str_stk;//在vector上實現的空棧

stack>str_stk2(svec);//初始時儲存svec的拷貝

對於乙個給定的介面卡,可以使用哪些容器是有限的。

所有介面卡要求容器具有新增和刪除元素的能力。所以,介面卡是不能構造在array,forward_list_上。

stack只要求push_back、pop_back和back操作,可使用除上述兩種容器的其他容器構造

queue要求back、push_back、front和push_front,構造於list和deque,但不能為vector

priority_queue要求front、push_back和pop_back操作,還要求隨機訪問能力,構造於vector或deque,不能基於list構造

棧介面卡

s.pop() 刪除棧頂元素,但不返回該元素值

s.push(item) 建立乙個新元素壓入棧頂,該元素通過拷貝或移動item,或者

s.emplace(args) 由args構造

s.top() 返回棧頂元素,但不出棧

我們只能使用是介面卡自己的操作,不能使用底層容器的操作

佇列介面卡

queue和priority_queue介面卡定義在queue標頭檔案中

queue預設基於deque實現,priority_queue預設基於vector實現

queue也可以用list和vector實現,priority_queue也可以使用deque實現

q.pop()

返回queue的首元素或priority_queue的最高端優先順序的元素,但不刪除此元素

q.front()

返回首元素或尾元素,但不刪除此元素

q.back()

只適用queue

q.top()

返回最高優先順序的元素,但不刪除此元素,只適用於priority_queue

q.push(item)

在queue和priority_queue中恰當的位置建立乙個元素

q.emplace(args) 其值為item,或者由args構造

標準庫queue先進先出的儲存和訪問策略,priority_queue允許我們為佇列的元素建立優先順序

容器介面卡(棧容器介面卡 佇列容器介面卡)

我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...

容器介面卡

容器介面卡通常是讓一種已存在的容器型別採用另一種不同的抽象型別的工作方式實現,一般情況下,它的初始化需要傳遞乙個容器作為引數,而它所有的操作也是在這個容器上實現的。標準庫提供了三種順序容器介面卡 stack queue priority queue,使用它們時需要包含 include 和 inclu...

容器介面卡

容器介面卡 stl 中包含三種介面卡 棧stack 佇列queue 和優先順序priority queue 介面卡是容器的介面,它本身不能直接儲存元素,它儲存元素的機制是呼叫另一種順序容器去實現,即可以把介面卡看作 它儲存乙個容器,這個容器再儲存所有元素 stl 中提供的三種介面卡可以由某一種順序容...