C++中动态申请一维、二维数组并释放方法

C/C++中动态开辟一维、二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下。

C++中有三种方法来动态申请多维数组

(1)C中的malloc/free

(2)C++中的new/delete

(3)STL容器中的vector

下面逐一介绍:

第一种:malloc/free
1.动态开辟一维数组

//动态开辟一维数组
void dynamicCreate1Array()
{
int m;
int i;
int *p;

printf("请输入开辟的数组长度:");
scanf("%d",&m);
p = (int*)malloc(sizeof(int)*m);//动态开辟

printf("请输入数据:");
for(i = 0; i < m ; i++)
	scanf("%d",&p[i]);

printf("输出数据:\n");
for(i = 0; i < m; i++)
	printf("%d ",p[i]);
free(p);

}

运行结果:

2.动态开辟二维数组

//动态开辟二维数组
void dynamicCreate2Array()
{
int m,n;
int i,j;
int **p;

printf("请输入数组行和列:");
scanf("%d%d",&m,&n);

p = (int**)malloc(sizeof(int*)*m); //开辟行

for(i = 0; i < m; i++)
{
	*(p+i) = (int*)malloc(sizeof(int)*n);//开辟列
}
//输入数据
printf("请输入数:");
for(i = 0 ; i < m;i++)
	for(j = 0; j < n;j++)
		scanf("%d",&p[i][j]);

//输出数据
for(i = 0 ; i < m;i++)
{
	for(j = 0; j < n;j++)
	{
	   printf("%3d ",p[i][j]);
	}
	printf("\n");
}
//释放开辟的二维空间
for(i = 0; i < m;i++)
	free(*(p+i));

}

运行结果:

第二种:new/delete
1.动态开辟一维数组

void DynamicCreate1Array()
{
int len;

cout<<"请输入长度:";
cin>>len;

int *p = new int[len];

cout<<"请输入数据:";
for(int i = 0; i < len; i++)
	cin>>p[i];

cout<<"输出数据:"<<endl;
for(i = 0; i < len; i++)
	cout<<setw(4)<<p[i];

delete[] p;

}

2.动态开辟二维数组

void DynamicCreate2Array()
{
int m,n;
cout<<“请输入行和列:”;
cin>>m>>n;

//动态开辟空间
int **p = new int*[m]; //开辟行
for(int i = 0; i < m; i++)
	p[i] = new int[n]; //开辟列

cout<<"请输入数据:";
for(i = 0 ; i < m ; i++)
	for(int j = 0; j < n; j++)
		cin>>p[i][j];

cout<<"输出数据:"<<endl;
for(i = 0; i < m; i++)
{
	for(int j = 0; j < n; j++)
		cout<<setw(3)<<p[i][j];
	cout<<endl;
}

//释放开辟的资源
for(i = 0; i < m; i++)
	delete[] p[i];
delete[] p;

}

第三种:STL中的vector
动态开辟二维数组

void VectorCreate()
{
int m,n;
cout<<“请输入行和列:”;
cin>>m>>n;

//注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。 
vector<vector<int> > p(m,vector<int>(n));

cout<<"请输入数据:";
for(int i = 0 ; i < m ; i++)
	for(int j = 0; j < n; j++)
		cin>>p[i][j];
	
cout<<"输出数据:"<<endl;
for(i = 0; i < m; i++)
{
	for(int j = 0; j < n; j++)
		cout<<setw(3)<<p[i][j];
	cout<<endl;
}

}

————————————————
原文链接:https://blog.csdn.net/u012027907/article/details/16370625

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值