第一天在light oj上刷了两道水题:因为据老师的建议那个oj的前100道题难度递增,很不错的,适合初学者,但是刷了两道水题之后觉得还不如回来学学STL,毕竟学会了挺方便的。
浏览了好几篇博客的STL的概要,决定先从vector开刀(它和c语言中的动态数组有点像):
First, 头文件:
#include<vector>
Second: 定义:
vector有好几种定义方式,其中这几种觉得比较实用点:
vector<int > Vint1;///一个不含任何元素的空vector(可以认为是空数组)
vector<int > vint2(n); ///含有十个初始化为0的元素的vector(类似int vint[10] = {0,0,0...} //10个0
vector<int > vint3(vin2);///vint3是vint2的一个拷贝,不严谨的表示为vint3 = vint2
Third:对vector中指定位置的元素操作方法:
1.vint[]—兼容c的操作——不检查越界,若是越界出错;
vector<int > vint2(30);
for(int i = 0 ; i < 20; i++)
{
vint2[i] = i;
}
for(int i = 0; i < 20; i++)
printf("%d ",vint2[i]);
2.vint.at(i)—stl自带方法——检查是否越界,越界则会抛出异常
vector<int > vint2(20);
for(int i = 0 ; i < 20; i++)
{
vint2.at(i) = 0;
}
for(int i = 0; i < 21; i++)
printf("%d ",vint2.at(i));
输出:
Fourth: vector迭代器(或者说指针)及常用方法:
1.vector迭代器:
vector<int > ::iterator p = vint.begin();
可以这样用:
for(vector<int > ::iterator p = vint.begin(); p != vint.end(); p++)
printf("%d ", *p);
2.vector常用方法:
1.vint.size() 返回vint中的数据个数;
2.vint.capacity() 返回vector中的个数(与vint.size()不同,它会返回vint的总长度,自己试一下就知道了)
3.vint.begin() 返回vint的首位置的迭代器;
4.vint.end() 返回vint最后一个数据后面位置的迭代器
5.vint.empty() 判断vint为空,空则为True,非空则为False
6.vint.clear() 清空vint,但不删除vint
7.vint.assign(n, num) 在vint的前n个位置赋值为num(当然,如果vector是其他类型类似)
8.vint.assign(v.begin(), v.end()) 把v中的[v.begin(), v.end())中的数据复制到vint中
最后文中有什么不足和错误,望交流和指教。