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

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

  • 相关阅读:
    pycharm使用
    python上手之环境搭建
    LDA浅析转
    矩阵按列按行归一化到L2范数的原理和最精简Matlab代码(转)
    (转)Low-Mid-High
    菲波纳数列的特性
    劝狼赋
    asp.net mvc Controller 模式下的 aop
    android for vs (三)visual studio android 发布为 apk
    android for vs (二)visual studio android 开发实例
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3763476.html
Copyright © 2011-2022 走看看