C STL容器運用

2021-09-25 17:19:57 字數 2914 閱讀 8021

priority_queue(優先佇列)是定義在 標頭檔案中的乙個模板類,與佇列相比,優先佇列不是按照入隊順序出隊,而是按照佇列中元素的優先權出隊。預設情況下,按照大者優先的順序出隊,也可以指定運算元來指定所需的優先順序。

priority_queueq1;  //定義資料型別為int,預設大的先出隊

priority_queue< pair> q2; //定義資料型別為pair,預設大的先出隊

priority_queue, greater> q3; //定義小的先出隊

queueq 的基本操作有:(先進先出)

入隊,如例:q.push(x); 將x 接到佇列的末端。

出隊,如例:q.pop(); 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。

訪問隊首元素,如例:q.front(),即最早被壓入佇列的元素。

訪問隊尾元素,如例:q.back(),即最後被壓入佇列的元素。

判斷佇列空,如例:q.empty(),當佇列空時,返回true。

stack的基本操作:(先進後出)

size()

返回棧的元素數

o(1)

top()

返回棧頂的元素

o(1)

pop()

從棧中取出並刪除元素

o(1)

push(x)

向棧中新增元素x

o(1)

empty()

在棧為空時返回true

o(1)

vector:

(1)a.assign(b.begin(), b.begin()+3);//b為向量,將b的0~2個元素構成的向量賦給a

(2)a.assign(4,2);//是a只含4個元素,且每個元素為2

(3)a.back();//返回a的最後乙個元素

(4)a.front();//返回a的第乙個元素

(5)a[i]; //返回a的第i個元素

(6)a.clear();//清空a中的元素

(7)a.empty();//判斷a是否為空,空則返回ture,不空則返回false

(8)a.pop_back();//刪除a向量的最後乙個元素

(9)a.erase(a.begin()+1,a.begin()+3);//刪除a中第1個(從第0個算起)到第2個元素,也就是說刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)

(10)a.push_back(5);//在a的最後乙個向量後插入乙個元素,其值為5

(11)a.insert(a.begin()+1,5);//在a的第1個元素(從第0個算起)的位置插入數值5,如a為1,2,3,4,插入元素後為1,5,2,3,4

(12)a.insert(a.begin()+1,3,5);//在a的第1個元素(從第0個算起)的位置插入3個數,其值都為5

(13)a.insert(a.begin()+1,b+3,b+6);//b為陣列,在a的第1個元素(從第0個算起)的位置插入b的第3個元素到第5個元素(不包括b+6),如b為1,2,3,4,5,9,8,插入元素後為1,4,5,9,2,3,4,5,9,8

(14)a.size();//返回a中元素的個數;

(15)a.capacity();//返回a在記憶體中總共可以容納的元素個數

(16)a.rezize(10);//將a的現有元素個數調至10個,多則刪,少則補,其值隨機

(17)a.rezize(10,2);//將a的現有元素個數調至10個,多則刪,少則補,其值為2

(18)a.reserve(100);//將a的容量(capacity)擴充至100,也就是說現在測試a.capacity();的時候返回值是100.這種操作只有在需要給a新增大量資料的時候才 顯得有意義,因為這將避免記憶體多次容量擴充操作(當a的容量不足時電腦會自動擴容,當然這必然降低效能) 

(19)a.swap(b);//b為向量,將a中的元素和b中的元素進行整體**換

(20)a==b; //b為向量,向量的比較操作還有!=,>=,<=,>,<

map:

std:mappersonnel; 

這樣就定義了乙個用int作為索引,並擁有相關聯的指向string的指標. 

map最基本的建構函式;

mapmapstring;

mapmapint;

mapmapstring;

map< char ,string>mapchar;

mapmapchar;

mapmapint;

map新增資料;

mapmaplive;

1.maplive.insert(pair(102,"aclive"));

2.maplive.insert(map::value_type(321,"hai"));

3, maplive[112]="april";//map中最簡單最常用的插入新增!

使用count,返回的是被查詢元素的個數。如果有,返回1;否則,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。

使用find,返回的是被查詢元素的位置,沒有則返回map.end()。

#include < unordered_map >//無序

unordered_map:

優點: 因為內部實現了雜湊表,因此其查詢速度非常的快

缺點: 雜湊表的建立比較耗費時間

適用處:對於查詢問題,unordered_map會更加高效一些,因此遇到查詢問題,常會考慮一下用unordered_map

set容器:

類似與乙個集合,它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set作為乙個容器也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。

c STL 容器 聯合容器

stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...

C STL容器總結

三大類容器 1.序列式容器 vector deque list vector是一種動態陣列,在記憶體中具有連續的儲存空間,支援快速隨機訪問。由於具有連續的儲存空間,所以在插入和刪除操作方面,效率比較慢。vector有多個建構函式,預設的建構函式是構造乙個初始長度為0的記憶體空間,且分配的記憶體空間是...

c STL容器基礎

stl序列式容器也叫線性容器.包括 array vector deque list 和 forward list 容器。1.stl容器的型別 簡單的理解容器,它就是一些模板類的集合,但和普通模板類不同的是,容器中封裝的是組織資料的方法 也就是資料結構 stl 提供有 3 類標準容器,分別是序列容器 ...