动态数组 My学习笔记讲解

目录

前言:

内容:

1)关于需要引用的头文件

2)构造一个动态数组

3)在数组中插入元素

4)获取数组长度并且访问元素

5)修改数组元素

6)删除数组元素

7)清空数组

8)用动态数组储存自定义数据

9)初始化

10)二维动态数组

题目:


前言:

准备阶段:关于什么是动态数组,动态数组的定义是什么,以及动态数组和静态(普通)数组的区别是什么,详见

静态数组与动态数组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;
}

运行结果为:

 笔记到此为止就结束了;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值