zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    Java Sping 第一章——初识 Spring
    C++设计模式——状态模式 State
    线性代数思维导图(3)——向量组
    基于Servlet实现简单系统登录
    优秀博客汇总
    整理一些开源项目
    Android UI性能优化详解
    (原创)如何在spannableString中使用自定义字体
    (原创)用讯飞语音实现人机交互的功能
    (原创)speex与wav格式音频文件的互相转换(二)
  • 原文地址:https://www.cnblogs.com/yyxayz/p/4556831.html
Copyright © 2011-2022 走看看