zoukankan      html  css  js  c++  java
  • c++动态创建和销毁二维数组

    如果二维数组中的高维确定,则可以TYPE (*p)[N] = new TYPE [][N]; 用这种方法。 

    最常用的方法:

          使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
                  
               int **b=new int*[row];       //分配一个指针数组,将其首地址保存在b中                                                     
               for(i=0;i<row;i++)             //为指针数组的每个元素分配一个数组
                   b[i]=new int[col];
               
            该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
               for(i=0;i<row;i++)
               {
                     delete [col]b[i];
                     b[i]=NULL;
               }
               delete [row]b;
               b=NULL;

    简化的销毁方法:

    for(int i=0;i<=len1;i++)
        {
            delete[] d[i];
        }
    delete[] d;

    推荐使用上面的做法。销毁的过程,先销毁指针数组每个元素指向的数组,然后再销毁这个指针数组

    #include<iostream>
    using namespace std;
    
    void func(int m,int n)
    {
         
         int x;
          
        int **p=new int*[m];
        for(int i=0;i<m;i++)
            p[i]=new int[n];
    
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            {
                //cin>>x;
    
                p[i][j]=rand();
                
            }
    
        for(int i=0;i<m;i++)
        {
    
            for(int j=0;j<n;j++)
            {
                cout<<p[i][j]<<ends;
            }
            cout<<endl;
        }
    
        for(int i=0;i<m;i++)
        {
            delete[n] p[i];
            p[i]=NULL;
        }
        delete [n]p; //经过测试p还不为NULL
        p=NULL;
         
    }
    
     
    
    int main()
    {
        func(5,5);
    
    }

    还可以用vecotor方便生成:

    #include   <iostream>   
    #include   <vector>   
    #include   <iomanip>   
      using   namespace   std;   
      int   main()   
      {   
        int   i,   
                j,   
                m,   //行数   
                n;   //列数   
        
        cout   <<   "input   value   for   m,n:";   
        cin>>m>>n;   
          
        //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。   构造函数Conatiner c(n,t) n elem,eachvalue  is t
        vector<vector<int>   >   vecInt(m,   vector<int>(n));       
        for   (i   =   0;   i   <   m;   i++)   
          for   (j   =   0;   j   <   n;   j++)   
            vecInt[i][j]   =   i*j;     
              
        for   (i   =   0;   i   <   m;   i++)   
        {   
          for   (j   =   0;   j   <   n;   j++)   
            cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];   
          cout<<endl;   
        }   
        
        return   0;   
      }

    http://www.diybl.com/course/3_program/c++/cppsl/2008316/104783.html


                                            

  • 相关阅读:
    如何使用Java计算货币/钱~(How to calculate monetary values in Java)
    BigDecimal类
    状态码定义
    常见服务器返回状态码(Status Codes)
    2020-3-26学习地图
    ReentrantLock类
    HashSet类
    Vector类
    课程总结
    第十四周课程总结&实验报告
  • 原文地址:https://www.cnblogs.com/youxin/p/2502633.html
Copyright © 2011-2022 走看看