vector动态数组

1. Vector的简介

vector虽然名为'向量',但是其本质是一个不定长数组,不仅如此,一些对数组进行常用操作也是被STL一起封装在了vector类型的内部,可以直接调用相应函数。

优点:节省内存空间

缺点:太麻烦了

在存放类型相同的大数据时,我们目前做法是定义数组。例如:int a[n]。这种定义方法要求是先确定数组的长度, 即N必须是常量。在解题和实际应用中,我们很难提前确定有多少组数据,因此一般会将数组长度设定为可能的最大值,这就容易造成极大的空间浪费。相同的操作,如果用stl中的Victor就能轻便的多:先定义vector<int> a。然后就可以直接在现有的数据的末尾添加新数据,并随时获取数组当前的长度。

2. Vector的用法

先导用Vector的头文件——就是Vector。

#include <vector>

随后我们可以用vector定义数组a,这里就有很多方式:

vector<int> a;    // a是一个空的1维整型
vector<int> b = {1,2,3,4,5};  // B相当于有五个元素都赋值了初始的一维整型数组。这一语句在老版本C中会报错,因此不推荐使用。
vector<int> c(5);  // C相当于有五个元素,且默认初始化为零的一维整型数组。
vector<int> d(5,-1);  // d相当于有五个元素,且默认初始化为-1的一维整型数组。
vector<vector<int> > e; //e相当于空的二维整型数组。注意两个">"之间有一位空格,不加空格的话可能会被一些编译器识别为输入时。用到的">>".

接下来如何往vector里面添加数据元素呢?最常用的是push_back函数。元素会被自动添加到数组尾部,比如下面的循环动态数组a将被扩展为十位,第i位存放的数字是i+1。

for (int i = 1; i <= 10; i++){
    a.push_back(i);
}

访问vector中的数据时,可以像传统数组一样用a[i]表示第i位的值。比如通过下面的循环,我们就将动态数组a中的全部元素都输出了一遍。并且以空格分隔。

for (int i =0; i < a.size(); i++){
    cout << a[i] << " ";
}

size是求a的长度

vector<int> aa;
aa[0] = 1;    //注意,这是错误的。aa在定义之后是空的,并不存在第零位,因此数据1不会被存入aa中。

与push_back对应,还有用于删除vector末尾元素的函数pop_back这说明。 Vector在对数组末尾进行增减元素的操作时尤为高效。比如删除动态数组a的最后一位元素只需要写:

a.pop_back();

如果我们想删除动态数组中的任意一个位置,我们可以这样写:

a[0]:

a.erase(a.begin());

a[5]:

a.erase(a.begin()+4);

 最厉害的是。 Erase可以删除一系列连续的数据:

删除0~5位

a.erase(a.begin(),a.begin()+4);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值