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

答案

posted @ 2017-09-03 21:07  Leonqqs  阅读(269)  评论(0编辑  收藏  举报