目录
前言:
准备阶段:关于什么是动态数组,动态数组的定义是什么,以及动态数组和静态(普通)数组的区别是什么,详见
静态数组与动态数组https://www.runoob.com/cprogramming/c-static-dynamic-array.html
内容:
1)关于需要引用的头文件
C++中vector的实现在一个< vector >头文件中,在代码开头需要引入这个头文件
即:
#include<vector>
2)构造一个动态数组
直接构造一个动态数组的方法为:vector<数据类型>动态数组名
例如:vector<S>vect 就是定义了一个名为vect的储存S类型的动态数组,其中,S是数组要储存的数据类型,可以是int,float,double,还可以是其他自定义的结构体类型。
注意:初始时vect是空的
3)在数组中插入元素
通过push_back( ) 方法在数组最后插入一个新的元素,例如
#include<vector>
int main()
{
vector <int> vect;//定义一个动态数组,但是数组元素为空
vect.push_back(11); //将11这个数放入数组,数组变为[11]
vect.push_back(22);//[11,22]
vect.push_back(33);//[11,22,33]
}
4)获取数组长度并且访问元素
通过size()方法获取vector长度,通过 数组名[] 操作直接访问vector中的元素,和普通数组一样,例如:输出上个代码中数组元素中的值
for(int i=0;i< vect.size();i++)//刚开始的第一个元素下标为0
{
cout<<vect[i]<<endl;
}
5)修改数组元素
修改数组中的元素很简单(本人很菜,但是也可以理解所以就是简单吧),只需用=给他赋值就行,如果vect中的元素一开始为[11,22,33],执行的操作及数组元素变为:
vect[1]=44; //数组元素变为[11,44,33]
vect[2]=55; //[11,44,55]
注意:访问的下标一定是合法的,即不能是未开出来的。
6)删除数组元素
和插入元素一样,删除元素的话也只能在动态数组的末端进行,通过 pop_back( ) 方法删除动态数组的最后一个元素,例如如果数组vect中的元素为[1,2,3],现在执行:
vect.pop_back();//数组元素变为[1,2]
vect.pop_back();//[1]
7)清空数组
只要调用 clear()方法就可以清空vector,但是只是清空vector,并不会清空开的内存,(具体要是清空内存的话本人也不是很清楚)
8)用动态数组储存自定义数据
动态数组不仅仅可以储存基本的数据类型,还能储存自定义数据类型,像结构体
struct student
{
string name;
int age;
}
int main()
{
vector<student>class;
student stu1;
stu1.name=xiaohong;
stu1.age=20;
class.push_back(stu1);
return 0;
}
代码不完善,就是演示一下简单的操作;
9)初始化
如果需要一个长度为n,初始化值为1的动态数组的话,可以
int n=10;
vector<int>vect;
for(int i=0;i<n;i++)
{
vect.push_back(1);
}
还可以在定义对象的时候赋予初始值,
int n=10;
vector<int>vect(n,1);
第一个参数n表示初始的动态数组长度;第二个参数1表示初始的数组里面每个元素的值。
10)二维动态数组
定义:vector<vector<int> >vect;便是定义了一个动态的二维数组,
注意:<int> > 后边的两个< <号中间有一个空格
int n=5;
vector<vector<int> >vect;
for(int i=0;i<n;i++)
{
vector<int> x(i+1,1);
vect.push_back(x);
}
for(inti=0;i<n;i++)
{
for(int j=0;j<vect[i].size();j++)
{
cout<<vect[i][j]<<" ";
}
}
通过此定义的二维数组,每一维都是空的,必须要一维一维的赋值,比如规定第一维大小为n上边代码定义的二维数组如下:
其中空白区域是未开辟的。
二维动态数组每一维长度都可以不一样,可以是任意形状的,可以快速构建一个n行m列的动态数组,每个元素初始为0,
vector<vector<int> >vect(n,vector<int>(m,0));
题目:
关于二维vector的使用:记录1~5的乘法表(第i行j列的元素值为(i+1)*(j+1) )
//关于二维vector的使用:记录1~5的乘法表
//第i行j列的元素值为(i+1)*(j+1)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
vector<vector<int> >vec2;//定义二维vector
for(int i=0;i<5;i++)
{
vec2.push_back(vector<int>());//定义空的二维数组
}
for(int i=0;i<vec2.size();i++)//行
{
for(int j=0;j<=i;j++)//列
{
vec2[i].push_back((i+1)*(j+1));//在第i行加入元素
}
}
for(int i=0;i<vec2.size();i++)//vec2.size()就是里面有几个vector,就是行的大小
{
for(int j=0;j<vec2[i].size();j++)//vec2[i].size就是每个vector里面有多少个int
{
cout<<i+1<<"*"<<j+1<<"="<<vec2[i][j]<<"\t";//"\t"是制表符,用来控制每一行对齐
}
cout<<endl;
}
return 0;
}
运行结果为:
笔记到此为止就结束了;