C++中二维数组的动态分配
作者: 来源:csdn博客 公布者:admin 时间:2009-04-23 13:55:03 点击:115
C++中一维数组的动态分配十分经常使用,但C++刚開始学习的人可能非常少想过要使用动态分配的二维数组,或者自觉得二维数组就是这样分配的(至少我自己開始的时候就这样觉得):int m=2, n=3; int** array2D=new int[m][n];。这全然是我们写多了像int n=4; int* array=new int[n];这种语句留下的后遗症,纯粹是由于惯性太大刹都刹不住,就像某同学学完“一二三”要写“万”一样。
事实往往不是这么简单,看以下的正确方法就知道了:#include <iostream>using std::cout;using std::endl;int main() { int i, j; int m=2, n=3;//分配行指针数组
int** array2D=new int*[m];//为每一行分配空间
for(i=0; i<m; ++i) { array2D[i]=new int[n]; }//能够略微測试一下
for(i=0; i<m; ++i) { for(j=0; j<n; ++j) { array2D[i][j]=i+j; } } for(i=0; i<m; ++i) { for(j=0; j<n; ++j) { cout<<array2D[i][j]<<"/t"; } cout<<endl; }//删除每一行分配的空间
for(i=0; i<m; ++i) { delete[] array2D[i]; }//删除行指针数组
delete[] array2D; return EXIT_SUCCESS;}
利用C++二维数组动态分配的特点,我们还能够分配出用静态数组无法实现的不等长二维数组,想要多少就分配多少。看以下的样例:
#include <iostream>using std::cin;using std::cout;using std::endl;int main() { int i, j; int m=3; int n[3]={1, 2, 3};//行指针数组
int** array2D=new int*[m]; //每行分配不一样多的空间 for(i=0; i<m; ++i) { array2D[i]=new int[n[i]]; }//測试一下
for(i=0; i<m; ++i) { for(j=0; j<n[i]; ++j) { array2D[i][j]=j+1; } } for(i=0; i<m; ++i) { for(j=0; j<n[i]; ++j) { cout<<array2D[i][j]<<"/t"; } cout<<endl; } //删除分配的空间 for(i=0; i<m; ++i) { delete[] array2D[i]; } delete[] array2D; return EXIT_SUCCESS;}
当然,假设你想一劳永逸,不想这么麻烦的分配来分配去,那么去写个类模板吧,在类模板中重载数组下标运算符,你就能够像使用静态数组一样使用你的类了。