c++用动态创建二维数组的几种方法

 

我们在这篇文章中将会为大家总结几种C++二维数组new的常用方法,并对此进行详细的点评,让大家充分了解其中的优缺点。

AD:


    C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里我们将会总结几种C++二维数组new的应用方式,来进行逐一的点评。

    C++二维数组new应用方式一:

       
       
    1. A (*ga)[n] = new A[m][n];   
    2. ...   
    3. delete []ga;  

    缺点:n必须是已知

    优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)

    C++二维数组new应用方式二:

       
       
    1. A** ga = new A*[m];   
    2. for(int i = 0; i < m; i++)   
    3. ga[i] = new A[n];   
    4. ...   
    5. for(int i = 0; i < m; i++)   
    6. delete []ga[i];   
    7. delete []ga;  

    缺点:非连续储存,程序烦琐,ga为A**类型

    优点:调用直观,n可以不是已知

    C++二维数组new应用方式三:

       
       
    1. A* ga = new A[m*n];   
    2. ...   
    3. delete []ga;  

    缺点:调用不够直观

    优点:连续储存,n可以不是已知

    C++二维数组new应用方式四:

       
       
    1. vector > ga;   
    2. ga.resize(m); //这三行可用可不用   
    3. for(int i = 1; i < n; i++) //   
    4. ga[i].resize(n); //   
    5. ...  

    缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大)

    优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长

    C++二维数组new应用方式五:

       
       
    1. vector ga;   
    2. ga.resize(m*n);  

    方法3,4的结合

    C++二维数组new应用方式六:

    2的改进版

       
       
    1. A** ga = new A*[m];   
    2. ga[0] = new A[m*n];   
    3. for(int i = 1; i < m; i++)   
    4. ga[i] = ga[i-1]+n;  

    优点:连续存储,n可以不是已知,析构方便,猜想只需delete [] ga;

     

     

    创建类型为Type的动态工作数组,这个数组有rows行和cols列。

    template <class Type>
    void Make2DArray(Type** &x,int rows, int cols)
    {   
          x=new Type*[rows];   
          for (int i=0;i<rows;i++)     
              x[i]=new Type[cols];
    }
    
    


     

    当不再需要一个动态分配的二维数组时,可按以下步骤释放它所占用的空间。首先释放在for循环中为每一行所分配的空间。然后释放为行指针分配的空间。

    template <class Type>
    void Delete2DArray(Type** &x,int rows)
    {  
          for (int i=0;i<rows;i++)     
             delete []x[i];   
         delete []x;   
         x=0;
    }
    
    


    释放空间后将x置为0,以防继续访问已被释放的空间.

    • 1
      点赞
    • 10
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值