Stl vector,map set簡單用法

2021-04-20 00:04:57 字數 3294 閱讀 2037

c++的標準模板庫(standard template library,簡稱stl)是乙個容器和演算法的類庫。容器往往包含同一型別的資料。stl中比較常用的容器是vector,set和map,比較常用的演算法有sort等。

.一. vector

1.宣告:

乙個vector類似於乙個動態的一維陣列。

vectora; //宣告乙個元素為int型別的vector a

vectota; //宣告乙個元素為mytype型別的vector a

這裡的宣告的a包含0個元素,既a.size()的值為0,但它是動態的,其大小會隨著資料的插入

和刪除改變而改變。

vectora(100, 0); //這裡宣告的是一已經個存放了100個0的整數vector

2.向量操作

常用函式:

size_t size();             // 返回vector的大小,即包含的元素個數

void pop_back();           // 刪除vector末尾的元素,vector大小相應減一

void push_back();          //用於在vector的末尾新增元素

t back();                  // 返回vector末尾的元素

void clear();              // 將vector清空,vector大小變為0

其他訪問方式:

cout<

例:int         intarray[10];   

vectorfirst_vector(intarray,         intarray         +         10);   

vectorsecond_vector(first_vector.begin(),first_vector.end());

class         man   

vectormanlist;   

man         thisman;   

thisman.id="2001";   

thisman.name="yourname";   

manlist.push_back         thisman;           //加入第乙個元素   

thisman.id="2002";   

thisman.name="myname";   

manlist.push_back         thisman;           //加入第二個元素   

manlist.clear();           //清空  

3.遍歷

(1).      for(vector::iterator it=a.begin(); it!=a.end();it++)

cout<<*it<

(2).     for(int i=0;i

cout<

二. map

map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性

map內部的實現自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能。

下面舉例說明什麼是一對一的資料對映。比如乙個班級中,每個學生的學號跟他的姓名就存在著一一對映的關係,這個模型用map可能輕易描述,

很明顯學號用int描述,姓名用字串描述(本篇文章中不用char *來描述字串,而是採用stl中string來描述),

下面給出map描述**:

1.            宣告方式:

mapmapstudent;

2.            資料的插入

在構造map容器後,我們就可以往裡面插入資料了。這裡講三種插入資料的方法:

第一種:用insert函式插入pair資料

mapmapstudent;

mapstudent.insert(pair(1, 「student_one」));

第二種:用insert函式插入value_type資料

mapmapstudent;

mapstudent.insert(map::value_type (1, 「student_one」));

第三種:用陣列方式插入資料

三. set

set是集合,set中不會包含重複的元素,這是和vector的區別。

定義:定義乙個元素為整數的集合a,可以用

seta;

基本操作:

對集合a中元素的有

插入元素:a.insert(1);

刪除元素(如果存在):a.erase(1);

判斷元素是否屬於集合:if (a.find(1) != a.end()) ...

返回集合元素的個數:a.size()

將集合清為空集:a.clear()

集合的並,交和差

set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator>(c,c.begin()));

set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator>(c,c.begin()));

set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator>(c,c.begin()));

(注意在此前要將c清為空集)。

注意:很重要的一點,為了實現集合的快速運算,set的實現採用了平衡二叉樹,因此,set中的元素必須是可排序的。如果是自定義的型別,那在定義型別的同時必須給出運算子《的定義

四.       sort

sort顧名思義就是排序

用法:單關鍵字:

對於vector a來說

sort(&a[0], &a[n]); //n=a.size()       將a中元素遞增排序。

多關鍵字:

我們也可以利用類pair

vector< pair> a; // 注意這裡兩個》 >中間必須有乙個空格,否則編譯器會當是運算子》

例如:int n,x,y;

cin >> n;

for(int i=0;i> x >> y;

a.push_back(make_pair(x,y)); // make_pair用於建立pair物件

}sort(&a[0], &a[n]);

注意:對於我們自己定義的類或結構,系統一般不能替我做比較運算,需要我們自己定義相應的運算子<

bool operator<(const mytype &x, const mytype &y)

Stl vector,map set簡單用法

c 的標準模板庫 standard template library,簡稱stl 是乙個容器和演算法的類庫。容器往往包含同一型別的資料。stl中比較常用的容器是vector,set和map,比較常用的演算法有sort等。一.vector 1.宣告 乙個vector類似於乙個動態的一維陣列。vecto...

BroadcastReciever簡單用法示例

生命週期非常短,在接受到廣播時建立,onrecieve 方法執行完後銷毀 10s內onrecieve 方法未執行完,會出現anr錯誤 broadcastreciever簡單用法示例 傳送廣播 intent intent new intent this,sendbraodcast intent 注 1...

mysql的簡單用法 mysql簡單用法

刪除使用者 drop user jack drop比delete刪除的優勢在於drop可以刪除使用者的許可權,更加徹底 更改使用者名稱 rename user jack to jacknew 使用者的都存在與user表中,更改名稱,許可權不變 更改使用者密碼 update mysql.user se...