【C++】动态开辟二维数组

本文详细阐述了如何动态开辟二维数组,并通过代码实例展示了实现动态数组扩容的策略,确保程序在处理大量数据时的高效性和灵活性。
/*
动态开辟二维数组

注意空间的开辟
注意 数组指针的使用

*/

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
const int N = 100001;
int n = 10;//初始设置的动态数组的大小
int(*p)[2] = new int[n][2];//注意这个地方的声明方式,数组指针
int i = 0;
int temp = 0;
int m = 0;//本题需要的数组大小
cin >> m;


//利用动态数组保存数据
while (1)
{
if (i == m)//退出条件
{
break;
}
if (i == n - 2)//实现动态开辟数组算法,当数组大小达到设定的一定范围是,扩大数组大小,一次扩大2倍
{
temp = n;


int(*q)[2] = new int[n][2];//开辟中间变量,保留原数组中的数据
for (int j = 0; j < temp - 2; j++)
{
for (int k = 0; k < 2; k++)
{
q[j][k] = p[j][k];
}
}
n *= 2;
p = new int[n + 1][2];//对原数组重新开辟空间


for (int j = 0; j < temp - 2; j++)//将中间变量中的数据转存到原来的数组中去
{
for (int k = 0; k < 2; k++)
{
p[j][k] = q[j][k];
}
}
delete[]q;//释放局部变量
}
for (int k = 0; k < 2; k++)
{
cin >> p[i][k];
}
i++;
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 2; j++)
{
cout << p[i][j] << " ";
}
cout << endl;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值