STL vector——c++
STL,就是c++的标准数据库,今天要讲的就是附属与它的vector的基本应用。
个人来说,我认为这个东东基本上没有什么用,但是总归得看懂吧。。。
这是一个动态的数组,可以随时定义它的大小(长度)
除了用万能头文件(bits/stdc++.h)的人,其它都要加上#include<vector>,如果只用BITS时报错,那就把这个加上吧。
定义位置:和定义普通数组一样。
定义方法:vector<数组类型名>数组名;
如果想定义多维数组,可以:vector<vector<数组类型名> >数组名;
注意,数组类型名后的两个> >中必须有空格,否则编译器将把它当作>>右移运算处理。
这是二维的,如果想更多维,可以将数组类型名改为vector<>,这个东东是可以嵌套的。
定义好了的数组,是从0开始的,并且长度为零,如何设置长度呢?
一维数组:
//若长度为n,数组名为a。
a.resize(n);
//好了,这是一个从0-(n-1)的数组,如何操作后面再说。
二位数组:
//若要大小为n*n,数组名为a。
a.resize(n);//这样第一维的长度就定好了
for(int i=0;i<n;i++)a[i].resize(n);//这样每一行的维度就都设置好了,就像二维数组了。过程如图示:
三位及以后,只要多重循环就行了,本人就不多讲了。
定义好了数组后,我们就要想如操作它了,以下介绍两种方法:
1、普通数组操作
for (int i=0;i<n;i++)scanf("%d",&a[i]);
就像普通数组一样操作。
2、迭代器操作
for (vector<和你要操作的数组一个类型(包括多维)>::iterator 循环变量名=要操作数组名.begin();循环变量名<要操作数组名.end();循环变量名++)scanf("%d",&(*循环变量名));
如果是多维,额(⊙o⊙)…我就没研究啦。
样例:
读入n(回车)1 2 3 4 5,输出1 2 3 4 5。
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
vector<int>a;
a.resize(n);
for ( vector<int>::iterator it=a.begin();it!=a.end();++it ) scanf("%d",&(*it));
for ( vector<int>::iterator it=a.begin();it!=a.end();++it ) printf("%d ",(*it));
return 0;
}
既然会使用了,那也要会用,下面介绍几种关于它的基本操作。
以下所讲的函数,都是以要操作的数组名.函数名()来操作的,就算()里为空,也得加上括号。
1、push_back(n);//将n添加在数组最后(长度会自动加)
2、pop_back();//清除数组最后的一个元素。
3、clear();//野蛮的将整个的长度清零,内容清零
4、insert(位置(从0开始),内容);在位置前插入内容。
整节课就讲完啦!接下有一道练习题,大家可以做做。
蛇形方阵
【问题描述】
输入n,n≤100。输出n阶蛇形方阵。例如n=5时,输出如下:
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25