数据结构vector(stl动态数组)

vector

1、介绍

vector为可变数组,即动态数组,定义数组时,可以随时添加数值和删除元素

//头文件
#include<vector>

初始化

vector<int>a;//定义了一个名为a的一堆数组,数组储存int类型数据

vector<double>b;//定义了一个名为b的一堆数组,储存浮点数据类型

vector<node>c;//定义了一个名为c的一堆数组,储存结构体数据类型

指定数组长度和初始值的初始化

vector<int>a(b);//定义一个名为a的一堆数组,长度为b,下标范围[0,b-1]

vector<int>c(d,1);//定义一个名为c的一堆数组,长度为d,初始化所有数据为1

拷贝初始化

vector<int>a(n,1);//先定义一个长度为n的数组a,初始化内容为1

vector<int>b(a);//两个数组 类型相同相同,长度相同,内容相同

二维动态数组

初始化
定义第一维固定长度为5,第二维可变化的二维数组
vector<int>a[5];//定义一个长度可变的二维数组,第一维固定长度为5,第二维长度可变

Ps:行数不可变,列数可变,和c语言中一般的二维数组刚好相反。

行和列均可变的数组
vector<vector<int>>a;//定义了一个行列长度均可变的二维数组
行和列均不变的数组
vector<vector<int>>a(n+1,vector<int>(m+1,0));//定义一个行为n+1,列为m+1初始值为0的数组

2、方法函数

vector<int>a;//首先先定义一个数组a;

 

函数代码

含义

复杂度

a.front()

返回数组的第一个数据

O(1)

a.back()

返回数组的最后一个数据

O(1)

a.pop_back()

删除最后一个数据

O(1)

a.size()

返回实际数据个数(unsigned类型)

O(1)

a.push_back(element)

尾部加一个数据

O(1)

a.clear()

清除元素个数,N为元素的个数

O(N)

a.resize(n,v)

改变数组大小为n,n个空间数值赋值为v,如果没有,默认赋值为零

\

a.insert(item,x)

向任意一个迭代器item插入一个元素x,例如a.insert(a.begin()+2,-1)将-1插入到a[2]的位置

O(N)

a.eerase(n,m)

删除[m,n)的所有元素

O(N)

a.begin()

返回首元素地址

O(1)

a.end()

返回最后一个元素的后一个位置的地址

O(1)

a.empty()

判断数组是否为空,空为真,否则为假

O(1)

sort

排序函数,以后的文章会讲到

\

访问方式

下标法:和普通数组一样通过0到a.size()-的下表进行访问
vector<int>a;

for(int i=0;i<4;i++){

a.push_back(i);

}
迭代器访问:类似指针一样的访问 ,首先需要声明迭代器变量,和声明指针变量一样。
vocter<int>a{0,1,2,3};

vector<int>::iterator item = a.begin();

for(int i = 0; i < 4; i++)

       cout << *(item + i) << " ";

cout << "\n";
使用auto关键字:会遍历数组的所有元素
vector<int> a(n);

for (auto &x: a) {

    cin >> x;

}

后续会对auto等关键字进行详细解释

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值