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
相关文章推荐
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组并释放方法
- C++中动态申请与释放二维数组
- 【原】动态申请二维数组并释放的三种方法
- 动态申请二维数组并释放方法
- C++ 关于二维数组的动态分配和释放——方法一(new)
- malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存
- C语言中二维数组的动态申请与释放
- 数据结构-C++描述:动态创建和释放一个二维数组
- VC中动态申请和释放二维数组 用new delete
- C++new delete 动态申请二维数组
- c\c++二维数组动态分配和释放
- 动态申请二维数组并释放
- 动态二维数组的申请、赋初值、使用、释放空间
- C++new delete 动态申请二维数组
- C++中动态分配二维数组的方法
- C语言中二维数组的动态申请与释放