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

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

  • 相关阅读:
    vue中实现后台管理路由标签页
    vue实现侧边导航栏
    node学习(-)
    javascript面试题(二)
    尾递归(简要)
    javascript面试题(一)
    Windows平台基于RTMP实现一对一互动直播
    如何实现RTMP推送Android Camera2数据
    Windows平台RTMP/RTSP直播推送模块设计和使用说明
    如何设计一款跨平台低延迟的RTMP/RTSP直播播放器
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3763476.html
Copyright © 2020-2023  润新知