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,若存在返回其在向量中的位置