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...