• C++中动态申请二维数组并释放方法


     C/C++中动态开辟一维、二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下。

     C++中有三种方法来动态申请多维数组

      (1)C中的malloc/free

      (2)C++中的new/delete 

      (3)STL容器中的vector

     下面逐一介绍:

    第一种:malloc/free

    1.动态开辟一维数组

    [cpp] view plaincopy
     
    1. //动态开辟一维数组  
    2. void dynamicCreate1Array()  
    3. {  
    4.     int m;  
    5.     int i;  
    6.     int *p;  
    7.       
    8.     printf("请输入开辟的数组长度:");  
    9.     scanf("%d",&m);  
    10.     p = (int*)malloc(sizeof(int)*m);//动态开辟  
    11.   
    12.     printf("请输入数据:");  
    13.     for(i = 0; i < m ; i++)  
    14.         scanf("%d",&p[i]);  
    15.   
    16.     printf("输出数据: ");  
    17.     for(i = 0; i < m; i++)  
    18.         printf("%d ",p[i]);  
    19.     free(p);  
    20. }  


    运行结果:

    2.动态开辟二维数组

    [cpp] view plaincopy
     
    1. //动态开辟二维数组  
    2. void dynamicCreate2Array()  
    3. {  
    4.     int m,n;  
    5.     int i,j;  
    6.     int **p;  
    7.   
    8.     printf("请输入数组行和列:");  
    9.     scanf("%d%d",&m,&n);  
    10.   
    11.     p = (int**)malloc(sizeof(int*)*m); //开辟行  
    12.   
    13.     for(i = 0; i < m; i++)  
    14.     {  
    15.         *(p+i) = (int*)malloc(sizeof(int)*n);//开辟列  
    16.     }  
    17.     //输入数据  
    18.     printf("请输入数:");  
    19.     for(i = 0 ; i < m;i++)  
    20.         for(j = 0; j < n;j++)  
    21.             scanf("%d",&p[i][j]);  
    22.       
    23.     //输出数据  
    24.     for(i = 0 ; i < m;i++)  
    25.     {  
    26.         for(j = 0; j < n;j++)  
    27.         {  
    28.            printf("%3d ",p[i][j]);  
    29.         }  
    30.         printf(" ");  
    31.     }  
    32.     //释放开辟的二维空间  
    33.     for(i = 0; i < m;i++)  
    34.         free(*(p+i));  
    35. }  


    运行结果:

    第二种:new/delete

    1.动态开辟一维数组

    [cpp] view plaincopy
     
    1. void DynamicCreate1Array()  
    2. {  
    3.     int len;  
    4.       
    5.     cout<<"请输入长度:";  
    6.     cin>>len;  
    7.       
    8.     int *p = new int[len];  
    9.       
    10.     cout<<"请输入数据:";  
    11.     for(int i = 0; i < len; i++)  
    12.         cin>>p[i];  
    13.       
    14.     cout<<"输出数据:"<<endl;  
    15.     for(i = 0; i < len; i++)  
    16.         cout<<setw(4)<<p[i];  
    17.       
    18.     delete[] p;  
    19. }  



    2.动态开辟二维数组

    [cpp] view plaincopy
     
    1. void DynamicCreate2Array()  
    2. {  
    3.     int m,n;  
    4.     cout<<"请输入行和列:";  
    5.     cin>>m>>n;  
    6.   
    7.     //动态开辟空间  
    8.     int **p = new int*[m]; //开辟行  
    9.     for(int i = 0; i < m; i++)  
    10.         p[i] = new int[n]; //开辟列  
    11.   
    12.     cout<<"请输入数据:";  
    13.     for(i = 0 ; i < m ; i++)  
    14.         for(int j = 0; j < n; j++)  
    15.             cin>>p[i][j];  
    16.    
    17.     cout<<"输出数据:"<<endl;  
    18.     for(i = 0; i < m; i++)  
    19.     {  
    20.         for(int j = 0; j < n; j++)  
    21.             cout<<setw(3)<<p[i][j];  
    22.         cout<<endl;  
    23.     }  
    24.   
    25.     //释放开辟的资源  
    26.     for(i = 0; i < m; i++)  
    27.         delete[] p[i];  
    28.     delete[] p;  
    29.   
    30. }  

    第三种:STL中的vector

    动态开辟二维数组

    [cpp] view plaincopy
     
      1. void VectorCreate()  
      2. {  
      3.     int m,n;  
      4.     cout<<"请输入行和列:";  
      5.     cin>>m>>n;  
      6.       
      7.     //注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。   
      8.     vector<vector<int> > p(m,vector<int>(n));  
      9.       
      10.     cout<<"请输入数据:";  
      11.     for(int i = 0 ; i < m ; i++)  
      12.         for(int j = 0; j < n; j++)  
      13.             cin>>p[i][j];  
      14.           
      15.     cout<<"输出数据:"<<endl;  
      16.     for(i = 0; i < m; i++)  
      17.     {  
      18.         for(int j = 0; j < n; j++)  
      19.             cout<<setw(3)<<p[i][j];  
      20.         cout<<endl;  
      21.     }  
      22.               
      23. }  
  • 相关阅读:
    开源工作流Fireflow源码分析之运行流程二
    沿线批量内插点对象
    shapefile数据无法正常浏览的问题
    InMemeryWorkspace的效率测试结果
    Oracle数据库SQL语句性能调整的基本原则[转存]
    <转>arcgis server部署 自己安装的体会
    AO中保存二进制大对象(BLOB)
    How to create new geodatabases
    使用C#向Excel中写数据
    oracle数据库的sde数据文件迁移操作方法
  • 原文地址:https://www.cnblogs.com/yyxayz/p/4556831.html
Copyright © 2020-2023  润新知