C++中二维数组的动态分配

    技术2022-05-11  0

    C++中二维数组的动态分配作者:   来源:csdn博客   发布者:admin

    时间:2009-04-23 13:55:03   点击:616 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;

    }

     

     

     

    当然,如果你想一劳永逸,不想这么麻烦的分配来分配去,那么去写个类模板吧,在类模板中重载数组下标运算符,你就可以像使用静态数组一样使用你的类了。


    最新回复(0)