说到数组,大伙肯定都不陌生,在C语言中还用的蛮多的,但是使用的场景却是有限的。当我们要用到数组却不知道要存放多少个元素时,普通的数组就有点无能为力了,所以vector就是来解决这一问题的,不仅如此,vector库里面还有很多的函数和模板,我们可以很方便的去使用。

首先,如果我们要使用vector,就必须加上下面这两个

#include<vector>
using namespace std;

现在我们来构造一个动态数组:

C++中直接构造一个vector的语句为:vector<T> vec。这样我们就定义了一个名为vec的存储T类型数据的动态数组,其中T时我们要存储的数据类型,可以是int、float、double、或者其他自定义的数据类型,初始化的时候vec是空的。比如vector<int> a; 定义了一个存储整数的动态数组a

插入元素:
C++中通过pus_back()的方法在数组最后面插入一个新的元素

#include <vector>
using namespace std;
int main()
{
    vector<int> vec;  //[]
    vec.push_back(1); //[1]
    vec.push_back(2); //[1,2]
    vec.push_back(3); //[1,2,3]
    return 0;
}

如果想要知道vector的长度,可以用vec.size()获取

#include<iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec; 
    vec.push_back(1); 
    vec.push_back(2); 
    vec.push_back(3); 
    vec[1] = 2; //可以像普通数组一样修改一个元素
    for(int i = 0 ; i < vec.size() ; ++i)
        cout<<v[i]<<endl;    //要访问和普通的数组一样用中括号
    return 0;
}

删除元素:使用vec.pop_back() ,会删除最后面的一个元素

清空vector:可以调用clear() ,但是clear只会清空vector,但是开辟的内存还在,可以使用一种方法清空vector的内存

//vector<int> v;  
vector<int>().swap(v);  //开一个空的vector和v交换就行了

vector构造函数

当我们需要构造一个数组时,第一肯定想到的就是循环,比如我们如果想构造一个长度为n,并且全部是1的数组时:

int n = 10;
vector<int> vec;
for(int i = 0 ; i < n ; ++i)
    vec.push_back(1);

但其实,我们还有更加方便的方法来构建一个动态的数组,如:

int n = 10;
vector<int> vec(n,1); //快速完成构建,第一个参数表示构造的个数,第二个参数表示初始的值,如果不传任何参数,默认为0

二维vector

我们知道,有二维数组这种东西,那二维vector怎么开呢,其实我们只需要在定义时这样声明就好了vector<vector<int> > vec2,注意在<int> > 里面是有空格的,否则在一些老版本上的编译器就会编译出错

int n = 5;
vector<vector<int> > vec2;
for(int i = 0; i < n ; ++i)
{ 
    vector<int> x(i+1,i);
    vec2.push_back(x);
}

for(int i = 0 ; i < n ; ++i)
{
    for(int j = 0 ; j < vec2[i].size() ; ++i)
        cout<<vec2[i][j]<<" ";
    cout<<endl;
}

vector超过二维之后使用就会特别麻烦,所以一般都只开到二维

在竞赛里面差不多掌握这么多就够了,剩下的就可以去刷题然后熟练使用

立志成为一名攻城狮
最后更新于 2020-03-11