C++中动态申请二维数组并释放方法
2016-04-05 18:33
435 查看
C/C++中动态开辟一维、二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下。
C++中有三种方法来动态申请多维数组
(1)C中的malloc/free
(2)C++中的new/delete
(3)STL容器中的vector
下面逐一介绍:
[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));
}
运行结果:
[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;
}
[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;
}
}
转载请标明出处:http://blog.csdn.net/u012027907
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;
}
}
转载请标明出处:http://blog.csdn.net/u012027907
相关文章推荐
- C++全局变量的声明和定义
- C++强制类型转化
- 多维数组和指针
- C++虚析构函数的作用
- effective c++ 条款
- 虚幻引擎CPP函数传入数组有时候编译不过的bug。
- C++的new和delete工作机理
- C++primer 练习11.33:实现你自己版本的单词转换程序
- C语言函数调用约定
- C++学习之旅-string类
- c/c++数组名和指针区别深入探索
- 用C++设计一个不能被继承的类(用私有构造函数+友元函数)
- 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)
- C++/C程序的基本概念(0)
- leetcode 链表排序
- C语言常用的宏
- c++之函数的调用
- 给c++程序员的一份礼物——常用工具集
- C++实验2—模拟ATM
- C++ 安全的删除指针和数组的宏定义方法