C 容器介面卡

2021-09-25 08:25:12 字數 3344 閱讀 2518

除去順序容器vector(向量,可變大小陣列),deque(雙端佇列),list(雙向鍊錶),forward_list(單向鍊錶),array(固定陣列大小,array的大小不可變)外,標準庫還定義了三個順序容器介面卡(stack、queue、priority_queue)。

介面卡是標準庫中乙個通用的概念,包含有容器介面卡、迭代器介面卡和函式介面卡

本質上,介面卡是使一事物的行為類似於另一類事物的行為的一種機制。容器介面卡讓一種已存在的容器型別採用另一種不同的抽象型別的工作方式實現。例如,stack介面卡可使任何一種順序容器以棧的方式工作,當然你也可以只用容器啊,不使用介面卡,這樣更靈活。

每個介面卡都定義了兩個建構函式:

1、預設建構函式構造乙個空物件,例如:stack stk;

2、通過乙個容器的拷貝來初始化介面卡,例如:

stack> str_stk;

//在vector上實現空棧

stack>

str_stk2

(svec)

;//str_stk2在vector上實現,初始化時儲存svec的拷貝

注:所有的介面卡都要求容器具有新增和刪除元素的功能,因此array和forward_list沒有介面卡。

介面卡種類

預設順序容器

可用順序容器

說明stack(棧)

deque

deque、vector、list

由於array和forward_list不能提供push_back、pop_back和back操作,所以不能使用array和forward_list構造stack。

queue(佇列)

deque

deque、list

queue介面卡要求back、push_back、font和pop_front,所以不能使用vector構造

priority_queue(優先佇列)

vector

vector、deque

priority_queue除了需要front、push_back和pop_back操作之外還要求隨機訪問能力,所以不能使用list

使用stack需要引入標頭檔案#include < stack>

支援的順序容器:deque、vector、list。預設支援deque。

棧介面卡的特有操作:

s.pop():刪除棧頂元素,但不返回該元素值(通過呼叫底層容器的pop_back()操作實現)

s.push(item):建立乙個新元素壓入棧頂,該元素通過拷貝或移動item而來的(通過呼叫底層容器的push_back()操作實現的)

s.emplace(args):壓入由args構造的元素進入棧頂(也是通過呼叫底層容器的emplace_back())操作實現的)

s.top():返回棧頂元素,但是不能將元素彈出棧(通過呼叫底層容器的back()操作實現的)

s.empty():判斷s是否為空,空返回true,否則返回false(通過呼叫底層容器的empty()操作實現的)

s.size():返回s中的元素個數(通過呼叫底層容器的size()操作實現的)

注:雖然這些操作是基於底層容器實現的,但是我們必須使用介面卡自己的操作

為了獲得最佳效能,應使用vector類作為stack的底層容器

使用queue需要引用標頭檔案#include< queue>

支援的順序容器:deque,list。預設支援deque。

佇列介面卡的特有操作:

q.pop():刪除queue的首元素(通過呼叫底層容器的pop_front()實現的)

q.push(item):在queue末尾新增建立乙個值為item的元素(通過呼叫底層容器的push_back()操作實現)

q.emplace(args):在queue末尾新增乙個由args構造的元素(通過呼叫底層容器的emplace_back()操作實現的)

q.front():返回首元素的引用(通過呼叫底層容器的front()操作實現的)

q.back():返回尾元素的引用(通過呼叫底層容器的back()操作實現的)

q.empty():判斷s是否為空,空返回true,否則返回false(通過呼叫底層容器的empty()操作實現的)

q.size():返回s中的元素個數(通過呼叫底層容器的size()操作實現的)

使用priority_queue需要引用標頭檔案#include < queue>

支援的順序容器:vector,queue。預設是vector。

priority_queue類,能按照有序的方式在底層資料結構中執行插入、刪除操作。

priority_queue的特有操作:

q.pop():刪除優先佇列priority_queue的最高優先順序元素(通過呼叫底層容器的pop_back()實現的)

q.push(item):在priority_queue優先順序順序合適的位置新增建立乙個值為item的元素(通過呼叫底層容器的push_back()操作實現)

q.emplace(args):在priority_queue優先順序順序合適的位置新增乙個由args構造的元素(通過呼叫底層容器的emplace_back()操作實現的)

q.top():返回priority_queue的首元素的引用(通過呼叫底層容器的front()操作實現的)

q.empty():判斷s是否為空,空返回true,否則返回false(通過呼叫底層容器的empty()操作實現的)

q.size():返回s中的元素個數(通過呼叫底層容器的size()操作實現的)

swap(q,p):交換兩個優先佇列priority_queue p,q的內容,p和q的底層容器型別也必須相同(通過呼叫底層容器的swap()操縱實現的)

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

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

C 容器介面卡

1 什麼是介面卡 2 容器介面卡 3 為什麼將stack queue和priority queue稱作為容器介面卡 雖然stack queue priority queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而s...

C 容器介面卡

除了順序容器外,標準庫還定義了三個順序容器介面卡 stack,queue和priority queue。介面卡是一種機制,能夠使某種事物行為看起來像另外一種事物。乙個容器介面卡接受一種已有的容器型別,使其行為看起來像一種不同的型別。所有容器介面卡都支援的操作和型別 操作和型別 說明size type...