1. 程式人生 > >學習C++——容器介面卡

學習C++——容器介面卡

容器介面卡

標準庫定義了三個順序容器介面卡:stack, queue和 priority_queue。 介面卡(adaptor)是標準庫中的一個通用的概念。容器、迭代器和函式都有介面卡。 一個介面卡是一種機制,能使某種事物的行為看起來像另一種事物一樣。 一個容器介面卡接受一種已有的容器型別,並使其行為看起來像是一種不同的型別。例如:stack介面卡接受一個順序容器(除array或foreward_list外),並使其操作起來像一個stack一樣。
所有容器介面卡都支援的操作和型別
size_type 一種型別,足以儲存當前型別的最大物件的大小
value_type 元素型別
container_type 實現介面卡的底層容器型別
A  a; 建立一個名為a的空介面卡
A  a(c); 建立一個名為a的介面卡,帶有容器c的一個拷貝
關係運算符 每個介面卡都支援所有關係運算符: ==, !=, <, <=, >, >=
這些運算子返回底層容器的比較結果
a.empty() 若a包含任何元素,返回false, 否則返回true
a.size() 返回a中的元素數目
swap(a, b) 交換a和b的內容,a,b必須有相同型別,包括底層容器型別也必須相同
a.swap(a) 交換a和b的內容,a,b必須有相同型別,包括底層容器型別也必須相同

1、定義一個介面卡

每個介面卡都定義了兩個建構函式:預設建構函式建立一個空物件;接受一個容器的建構函式拷貝該容器來初始化介面卡。
  • 如果deq是一個deque<int>,我們可以用deq來初始化一個新的stack。如:stack<int>  stk(deq);/
    /從deq拷貝元素到stk
  • 預設情況下,stack和queue是基於deque實現的,priority_queue是在vector之上實現的。
  • 我們可以在建立一個介面卡的時候將一個命名的順序容器作為第二個型別引數,來過載預設容器型別。如下:
	//在vector上實現的空棧
	stack<string, vector<string>> str_stk;
	//str_stk2在vector上實現,初始化時儲存svec的拷貝
	stack<string, vector<string>> str_stk2(svec);
備註:
  • stack只要求push_back, pop_back, back操作,因此使用
    array和forward_list之外
    的任何容器型別來構造stack。
  • queue介面卡要求back,push_back,  front, push_front 操作,因此使用list或deque來構造,但不能基於vector構造
  • priority_queue除了front, push_back, 和pop_back操作之外,還要求隨機訪問能力,因此它可以構造於vector或deque之上,但是不能使用list構造

2、棧介面卡

stack型別定義在stack標頭檔案中。
棧操作
s.pop() 刪除棧頂元素,但不返回該元素值
s.push(item)
s.emplace(args)
建立一個新元素壓入棧頂,該元素通過拷貝或移動item而來,
或者由args構造
s.top() 返回棧頂元素,但不將元素彈出棧
備註:
  • 當呼叫emplace成員函式時,是將引數傳遞給元素型別的建構函式。emplace使用這些引數在容器管理的記憶體空間中直接構造元素。
  • 棧預設是基於deque實現,也可以在list或vector之上實現。
	stack<int> intStack;//空棧
	for(size_t ix = 0; ix != 10; ++ix)
		intStack.push(ix);//intStack儲存0-9共十個數字
	while(!intStack.empty())
	{
		int value = intStack.top();//返回棧頂元素,但是並不彈出該值,棧的內容保持不變。
		intStack.pop();//彈出棧頂元素,但是不返回該值,僅僅是刪除該值
	}
備註: 每個容器介面卡都基於底層容器型別的操作定義了自己的特殊操作。我們只能使用介面卡操作,不能使用底層容器型別的操作。 例如:stack是基於deque實現的,但是stack只能使用push操作,而不能使用deque的push_back操作。

3、佇列介面卡

queue和priority_queue介面卡定義在queue標頭檔案中。
queue和priority_queue操作
q.pop() 返回queue的首元素或priority_queue的最高優先順序的元素,但不刪除此元素。
q.front() 返回首元素,但不刪除此元素,只適用於queue
q.back() 返回尾元素,但不刪除此元素,只適用於queue
q.top() 返回最高優先順序元素,但不刪除該元素,只適用於priority_queue
q.push(item)
q.emplace(args)
在queue末尾或priority_queue中適當的位置建立一個元素,其值為item,
或者由args構造

備註: priority_queue允許我們為佇列中的元素建立優先順序。新加入的元素會排在所有優先順序比它低的已有元素之前。 飯店按照客人預訂時間而不是到來時間的早晚來為他們安排座位,就是一個優先佇列的例子。 預設情況下,標準庫在元素型別上使用<運算子來確定相對優先順序。

相關推薦

學習C++——容器介面卡

容器介面卡 標準庫定義了三個順序容器介面卡:stack, queue和 priority_queue。 介面卡(adaptor)是標準庫中的一個通用的概念。容器、迭代器和函式都有介面卡。 一個介面卡是一種機制,能使某種事物的行為看起來像另一種事物一樣。 一個容器介面卡接受一

C++容器介面卡

一、標準庫順序容器介面卡的種類 標準庫提供了三種順序容器介面卡:queue(FIFO佇列)、priority_queue(優先順序佇列)、stack(棧) 二、什麼是容器介面卡 首先,我們要明白介面卡是幹什麼的?其實就是一個介面轉換裝置,是得我們能用特定的方法去操作一些我們本來無

C++容器介面卡容器有什麼區別

標準庫提供了三種順序容器介面卡:queue、priority_queue、stack。 介面卡是標準庫中通用的概念,包括容器介面卡、迭代器介面卡和函式介面卡。本質上,介面卡是使一事物的行為類似於另一類

C++容器介面卡的理解與使用

1.對容器介面卡的理解 C++提供了三種容器介面卡(container adapter):stack,queue和priority_queue。stack和queue基於deque實現,priority_queue基於vector實現。 舉個簡單的例子,我們

深入學習c++--容器

學習 img png nor stack eight 數組 strong 操作 1. 簡介 1. 序列式容器: array, vector, deque, list, forward_list --- 數組 或者 指針實現 2. 關聯容器: set, map, mu

C++容器,迭代器,容器介面卡

容器 順序容器 主要靠下標和迭代器進行操作。順序性的主要靠下標,鏈式的靠迭代器訪問。 包含了順序型的容器和鏈式的容器。 連續型的包括: vector:向量,可以快速擴充套件和刪除元素,在隊尾的操作有優勢! deque:雙端佇列,可以快速的從隊首和隊尾新增或者刪

8、【C++ STL】容器介面卡(stack/queue/priority_queue)

容器介面卡     stack、queue、priority_queue 都不支援任一種迭代器,它們都是容器介面卡型別,stack是用vector/deque/list物件建立了一個先進後出容器;queue是用deque或list物件建立了一個先進先出容器;pr

C++STL學習——List容器

List容器 List簡介 list是一個雙向連結串列容器,可高效地進行插入刪除元素。 list不可以隨機存取元素,所以不支援at.(pos)函式與[]操作符。It++(ok) it+5(err) 標頭檔案#include<list> lis

C++學習容器的摸索

初學容器,容易犯錯的地方 1.vector,list和deque都是順序容器。其中vector和deque都可以通過下標訪問,而list不能 2. 容器的begin和end操作   c.begin()返回一個迭代器,它指向容器c的第一個元素   c.end()返回一個迭代器,它指向容

【轉】C++順序性容器、關聯性容器容器介面卡

什麼是容器 首先,我們必須理解一下什麼是容器,在C++中容器被定義為:在資料儲存上,有一種物件型別,它可以持有其它物件或指向其它對像的指標,這種物件型別就叫做容器。很簡單,容器就是儲存其它物件的物件,當然這是一個樸素的理解,這種“物件”還包含了一系列處理“其它物件”的方法,因為這些方法在程式

C++(14)STL分析與實踐之容器介面卡

STL實踐與分析 --容器介面卡 引: 除了順序容器,標準庫還提供了三種順序容器介面卡:queue,priority_queue和stack,介面卡是標準庫中的概念,包

C++ STL 容器介面卡介面卡

http://blog.sina.com.cn/s/blog_9946f55601016qwk.html C++ STL 容器介面卡     標準庫提供了三種順序容器介面卡:queue、priority_queue、stack.介面卡是標準庫中通用的概念,包括容器介面卡、迭

C++學習:STL-介面卡

一、介面卡分類二、容器介面卡三、迭代器介面卡四、演算法介面卡介面卡是一種設計模式。一、介面卡分類 容器介面卡:  stack                   預設基於deque容器實現  queue                  預設基於deque容器實現  prio

C++】STL——容器介面卡

1、stack2、priority_queue           #include<queue>(1)基礎介紹priority_queue 優先佇列,其底層是用堆來實現的。模板宣告帶有三個引數:priority_queue<Type, Container,

c++學習容器——erase()函式

先介紹erase()函式的用法,erase()函式用於在順序型容器中刪除容器的一個元素,有兩種函式原型,c.erase(p),c.erase(b,e);第一個刪除迭代器p所指向的元素,第二個刪除迭代器b,e所標記的範圍內的元素,c為容器物件,返回值都是一個迭代器,該迭代器

C++的STL容器容器介面卡:stack、queue、priority_queue

STL對定義的通用容器分三類:順序性容器、關聯式容器和容器介面卡。順序性容器:vector、list、deque關聯性容器:set、multiset、map、multimap容器介面卡:stack、qu

C++】容器介面卡實現佇列Queue的各種功能(入隊、出隊、判空、大小、訪問所有元素等)

介面卡:將一個通用的容器轉換為另外的容器,所謂的容器,指的是存放資料的器具,像我們知道的順序表和連結串列都是容器Container。舉個例子解釋一下吧,我們的電壓都是220v,而像充電線就起到轉換到合適的電壓的作用。而這裡,我們的主角就是將通用的連結串列結構轉換為來實現佇列Q

[深入學習C#]C#實現多線程的方式:Task——任務

ren avr 利用 run 如何 創建 其中 continue rep 簡介   .NET 4包含新名稱空間System.Threading.Tasks,它 包含的類抽象出了線程功能。 在後臺使用ThreadPool。 任務表示應完成的某個單元的工作。 這個單元的工作可以

Java學習筆記----容器

class div key-value 程序 對象 dha for string 選擇 一、Java Collections框架是什麽? Java Collections 框架中包括了大量集合接口以及這些接口的實現類和操作它們的算法(如:排序、查找、反轉、替換、復制、取

快速學習C語言途徑,讓你少走彎路

串處理 毫無 深入 中國人 sql 以及 ubi 思維 思路   1.標準C語言能幹什麽?   坦白講,在今天軟件已經發展了半個多世紀,單純的C語言什麽都幹不了。標準C語言庫只提供了一些通用的邏輯運算方法以及字符串處理,當然字符串在C語言看來也是一種操作內存的方法,所以單純