zoukankan      html  css  js  c++  java
  • C++中二维数组的动态分配

    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;
    }

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

  • 相关阅读:
    [bzoj 3048] [Usaco2013 Jan]Cow Lineup
    [bzoj 3192] [JLOI2013]删除物品
    搬迁至新博客的原因
    洛谷 P3317 [SDOI2014]重建(矩阵树定理+数学推导) [bzoj3534]
    [bzoj1002]: [FJOI2007]轮状病毒(矩阵树定理)
    [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
    高精度板子
    洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
    字符串--manacher算法(回文串匹配)
    洛谷 P2633 Count on a tree[bzoj2588](倍增lca+主席树)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3756827.html
Copyright © 2011-2022 走看看