为什么要用STL,STL的好处?
STL是一个打包了数据结构的函数库,STL的所有对象都没必要提前分配内存大小,它会根据对象存取数据的大小来分配空间大小(系统自动扩张)
1.vector(向量)(底层是数组)
向量没有确定数据类型所以向量可以是多种数据类型,但是注意一个向量对象只能有一种数据类型,可以构造二维向量(二维数组)比如二维整型向量vector<vector> 值得注意的是二维向量的大元素和小元素(行元素和最小元素)都是一个向量可以不分配大小而是通过数据的规模分配大小
这里介绍整型向量的常用方法函数(其他类型的可以自行通过转换类型达到相同的效果):
vector a(10); //定义了10个整型元素的向量
vector a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
vector a(b); //用b向量来创建a向量,整体复制性赋值
vector a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); //是a只含4个元素,且每个元素为2
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
a.clear(); //清空a中的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); //删除a向量的最后一个元素
a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5
a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
vector的find函数是一个比较特殊的函数他的返回值必须用迭代器接收
迭代器即为一个存储某个值在向量中的地址 整型迭代器的定义方式:vector::iterator 可以接收vector的元素的地址
vector的find函数: vector::iterator it; it=find(a.begin(),a.end(),int) 其中a为vector的对象
此时为查找a开头到结尾是否有这个值,如果没有就会返回a.end().
如果需要查找vector其中一个元素的下标是多少那么就用it-a.begin()即可求出下标
2.string(字符串)
字符串也能根据其值的大小来自动分配空间,相当于字符数组但是不需要提前分配空间
string 可用+直接连接字符串
这里介绍string的常用函数: