您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-29 12:34 351 查看


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

标签: C语言c++数组动态开辟
2013-11-17 17:00 11752人阅读 评论(7) 收藏 举报


 分类:

C++(18) 

 C(4) 


版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

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

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

  (1)C中的malloc/free

  (2)C++中的new/delete 

  (3)STL容器中的vector

 下面逐一介绍:

第一种:malloc/free

1.动态开辟一维数组

[cpp] view
plain copy

 print?

//动态开辟一维数组  

void dynamicCreate1Array()  

{  

    int m;  

    int i;  

    int *p;  

      

    printf("请输入开辟的数组长度:");  

    scanf("%d",&m);  

    p = (int*)malloc(sizeof(int)*m);//动态开辟  

  

    printf("请输入数据:");  

    for(i = 0; i < m ; i++)  

        scanf("%d",&p[i]);  

  

    printf("输出数据:\n");  

    for(i = 0; i < m; i++)  

        printf("%d ",p[i]);  

    free(p);  

}  

运行结果:



2.动态开辟二维数组

[cpp] view
plain copy

 print?

//动态开辟二维数组  

void dynamicCreate2Array()  

{  

    int m,n;  

    int i,j;  

    int **p;  

  

    printf("请输入数组行和列:");  

    scanf("%d%d",&m,&n);  

  

    p = (int**)malloc(sizeof(int*)*m); //开辟行  

  

    for(i = 0; i < m; i++)  

    {  

        *(p+i) = (int*)malloc(sizeof(int)*n);//开辟列  

    }  

    //输入数据  

    printf("请输入数:");  

    for(i = 0 ; i < m;i++)  

        for(j = 0; j < n;j++)  

            scanf("%d",&p[i][j]);  

      

    //输出数据  

    for(i = 0 ; i < m;i++)  

    {  

        for(j = 0; j < n;j++)  

        {  

           printf("%3d ",p[i][j]);  

        }  

        printf("\n");  

    }  

    //释放开辟的二维空间  

    for(i = 0; i < m;i++)  

        free(*(p+i));  

}  

运行结果:



第二种:new/delete

1.动态开辟一维数组

[cpp] view
plain copy

 print?

void DynamicCreate1Array()  

{  

    int len;  

      

    cout<<"请输入长度:";  

    cin>>len;  

      

    int *p = new int[len];  

      

    cout<<"请输入数据:";  

    for(int i = 0; i < len; i++)  

        cin>>p[i];  

      

    cout<<"输出数据:"<<endl;  

    for(i = 0; i < len; i++)  

        cout<<setw(4)<<p[i];  

      

    delete[] p;  

}  

2.动态开辟二维数组

[cpp] view
plain copy

 print?

void DynamicCreate2Array()  

{  

    int m,n;  

    cout<<"请输入行和列:";  

    cin>>m>>n;  

  

    //动态开辟空间  

    int **p = new int*[m]; //开辟行  

    for(int i = 0; i < m; i++)  

        p[i] = new int
; //开辟列  

  

    cout<<"请输入数据:";  

    for(i = 0 ; i < m ; i++)  

        for(int j = 0; j < n; j++)  

            cin>>p[i][j];  

   

    cout<<"输出数据:"<<endl;  

    for(i = 0; i < m; i++)  

    {  

        for(int j = 0; j < n; j++)  

            cout<<setw(3)<<p[i][j];  

        cout<<endl;  

    }  

  

    //释放开辟的资源  

    for(i = 0; i < m; i++)  

        delete[] p[i];  

    delete[] p;  

  

}  

第三种:STL中的vector

动态开辟二维数组

[cpp] view
plain copy

 print?

void VectorCreate()  

{  

    int m,n;  

    cout<<"请输入行和列:";  

    cin>>m>>n;  

      

    //注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。   

    vector<vector<int> > p(m,vector<int>(n));  

      

    cout<<"请输入数据:";  

    for(int i = 0 ; i < m ; i++)  

        for(int j = 0; j < n; j++)  

            cin>>p[i][j];  

          

    cout<<"输出数据:"<<endl;  

    for(i = 0; i < m; i++)  

    {  

        for(int j = 0; j < n; j++)  

            cout<<setw(3)<<p[i][j];  

        cout<<endl;  

    }  

              

}  



代码如下:

#include <iostream>

#include <vector>

using namespace std;

void c_malloc(){
int m, n;
cin >> m >> n;
cout << sizeof(int) << endl;
int **p = (int **)malloc(sizeof(int*)*m);
for (int i = 0; i < m; i++){
p[i] = (int *)malloc(sizeof(int)*n);
memset(p[i], 0, n*4);
for (int j = 0; j < n; j++)
cout << p[i][j] << " ";
cout << endl;
}

}

void c_new(){
int m, n;
cin >> m >> n;
cout << sizeof(int) << endl;
int **p = new int*[m];
for (int i = 0; i < m; i++){
p[i] = new int
;
memset(p[i], -1, n * sizeof(int));
for (int j = 0; j < n; j++)
cout << p[i][j] << " ";
cout << endl;
}

}

void c_vector(){
int m, n;
cin >> m >> n;
vector<vector<int>> p(m, vector<int>(n));
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
p[i][j] = 0;
cout << p[i][j] << " ";
}
cout << endl;
}
for (vector<int> a : p){
for (int b : a){
cout << b << " ";
}
cout << endl;
}

}

int main(){
c_malloc();
c_new();
c_vector();
return 0;

}

转载请标明出处:http://blog.csdn.net/u012027907
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: