如何输入一个二维数组 长度不定C++

比如 a[m][n],m和n未知,由用户定,可以用动态存储分配么,急啊
2024年11月22日 08:26
有4个网友回答
网友(1):

两种方法,简单一点的,C++允许动态定义数组,所以可以这样#include
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int a[m][n];
int i, j;
for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
cin >> a[i][j];
cout << "print:\n";
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)
cout << a[i][j]<< ' ';
cout < }
}

复杂一点的,完全动态分配
#include
using namespace std;
int main()
{
int m, n;
int i, j;
cin >> m >> n;
int ** a;
a = new int * [m];
for(i = 0; i < m; i ++)
a[i] = new int [n];

for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
cin >> a[i][j];
cout << "print:\n";
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)
cout << a[i][j]<< ' ';
cout < }

for(i = 0; i < m; i ++)
delete []a[i];
delete []a;
}

效果相同
对于mn比较大的情况,推荐用第二种

网友(2):

C++数组申明时必须知道数组长度,所谓动态数组其实是申明一个指针指向一个数组。数组使用NEW来申请内存空间,一楼说的第一种方法在某些编译器可以。第二种是对的

网友(3):

int **a;
int m,n;
cin>>m>>n;
*a=new int[m];
for(int i=0;i a[m]=new int[n];
}

网友(4):

申请一个动态的二维数组:
int m, n;
cin>>m>>n;
int **a = new int* [m];
for(int i=0; i a[i] = new int[n];
}