STL提供了一組表示容器、迭代器、函數對象和算法的模板。數組
STL使得可以構造各類容器(包括數組、隊列和鏈表)和執行各類操做(包括搜索、排序和隨機排列)函數
接下來介紹幾種ACMer必須掌握的幾個成員指針
向量(Vector)是一個封裝了動態大小數組的順序容器(Sequence Container)。跟任意其它類型容器同樣,它可以存放各類類型的對象。能夠簡單的認爲,向量是一個可以存聽任意類型的動態數組。code
通常來講數組不能動態拓展,所以在程序運行的時候不是浪費內存,就是形成越界。而vector正好彌補了這個缺陷,它的特徵是至關於可分配拓展的數組(動態數組),它的隨機訪問快,在中間插入和刪除慢,但在末端插入和刪除快。orm
//頭文件必須包含: #include<vector> //定義一個vector,int爲數組元素的數據類型,test1爲動態數組名 vector<int>test1; //定義一個元素爲結構體型的vector vector<information>test2 //定義一個迭代器 vector<int>::iterator it;
vector的初始化能夠有不少種方式:對象
//定義10個整型元素的向量(尖括號中爲元素類型名,它能夠是任何合法的數據類型),但沒有給出初值,其值是不肯定的。 ① vector<int> a(10); //定義了10個整型元素的向量,且給出每一個元素的初值爲1 ② vector<int> a(10,1); //用b向量來建立a向量,總體複製性賦值 ③ vector<int> a(b); //定義了a值爲b中第0個到第2個(共3個)元素 ④ vector<int> a(b.begin(),b.begin+3); //從數組中得到初值 ⑤ int b[7]={1,2,3,4,5,9,8}; vector<int> a(b,b+7);
容器大小:a.size();//返回a中元素個數排序
容器容量:a.capacity();//預分配的內存空間與size不一樣,返回a在內存中總共能夠容納的元素個數隊列
容器判空:a.empty();//空則返回true,不然返回false內存
更改容器大小:a.resize(num);a.resize(num,value);
a.resize(10); //將a的現有元素個數調至10個,多則刪,少則補,其值隨機 a.resize(10,2); //將a的現有元素個數調至10個,多則刪,少則補,其值爲2
將區間[first,end)中的數據賦值給a (注意區間的開閉):a.assign(first,end)
a只含n個元素,且每一個元素爲elem:a.assign(n,elem)
a.assign(b.begin(), b.begin()+3); //b爲向量,將b的0~2個元素構成的向量賦給a a.assign(4,2);//a只含4個元素,且每一個元素爲2
//假設 a:5 7 3 1 4;b: 2 3 4 5 6 7 8 a.push_back(2);//a:5 7 3 1 4 2 a.insert(a.begin()+1,2);//a:5 2 7 3 1 4 a.insert(a.begin()+1,2,3);//a:5 3 3 7 3 1 4 a.insert(a.begin()+1,b.begin()+2,b.begin()+5);//a:5 4 5 6 7 3 1 4
a.erase(a.begin()+1,a.begin()+3); //刪除a中第1個(從第0個算起)到第2個元素,也就是說刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
須要包含頭文件:
#include<algorithm> (1)sort(a.begin(),a.end()); //對a中的從a.begin()(包括它)到a.end()(不包括它)的元素進行從小到大排列 (2)reverse(a.begin(),a.end()); //對a中的從a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素爲1,3,2,4,倒置後爲4,2,3,1 (3)copy(a.begin(),a.end(),b.begin()+1); //把a中的從a.begin()(包括它)到a.end()(不包括它)的元素複製到b中,從b.begin()+1的位置(包括它)開始複製,覆蓋掉原有元素 (4)find(a.begin(),a.end(),10); //在a中的從a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置