C++ Code:动态分配数组内存的六种方法
问题:
如何快速给数组分配自定义长度的内存,方法有哪些?
本博客提供六种方法介绍,包含各种常用用法,且代码片亲自 编写-注解-编译-通过,对读者负责。
阐述:
提到动态分配C++的数组,我们想到的标签会有:malloc-free、new-delete、一维、二维...等等,本博客初创初心是各大公司企业都会青睐于在笔试或者面试中,要求应届生具备手写分配内存、或者排序之类的代码的能力,所以提供六种用法。
正文:
1、利用“malloc-free”动态分配一维数组:
#include <iostream> #include<stdlib.h> //该头文件为malloc必须 using namespace std; int main() { int len; int *p; cout<<"请输入开辟动态数组的长度:"<<endl; cin>>len; //长度乘以int的正常大小,才是动态开辟的大小 p = (int*)malloc(len*sizeof(int)); cout<<"请逐个输入动态数组成员:"<<endl; for(int i=0; i<len; ++i) { //此处不可以写成:cin>>*p[i] cin>>p[i]; } cout<<"您输入的动态数组为:"<<endl; for(int i=0; i<len; ++i) { cout<<p[i]<<" "; } //时刻记住:有malloc就要有free free(p); }
2、利用“malloc-free”动态分配二维数组:
#include <iostream> #include<stdlib.h> //该头文件为malloc必须 using namespace std; int main() { int row,col; int **p; cout<<"请输入开辟动态数组的行 & 列:"<<endl; cin>>row>>col; //开始开辟 p = (int**)malloc(row*sizeof(int*));//为数组的行开辟空间 for(int i=0; i<row; ++i) { *(p+i)=(int*)malloc(col*sizeof(int));//为数组的列开辟空间 } //输入成员 cout<<"请逐个输入动态数组 各行各列 成员:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; ++j) { //此处不可以写成:cin>>*p[i] [j] cin>>p[i][j]; } //输出成员 cout<<"您输入的动态数组 各行各列 成员如下:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; ++j) { cout<<p[i][j]; } //时刻记住:有malloc就要有free for(int i=0; i<row; ++i) { free(*(p+i)); } }
#include <iostream> using namespace std; int main() { int len; cout<<"请输入开辟数组的长度:"<<endl; cin>>len; int *p = new int [len]; //数据输入 cout<<"请逐个输入数据:"<<endl; for(int i=0; i<len; ++i) { cin>>p[i]; } //数据反馈 cout<<"您分配的动态数组为:"<<endl; for(int i=0; i<len; ++i) { cout<<p[i]<<" "; } //释放内存: delete []p; }
#include <iostream> using namespace std; int main() { int row,col; cout<<"请输入开辟数组的行 & 列:"<<endl; cin>>row>>col; //行的开辟 int **p = new int*[row]; for(int i=0; i<row; ++i) { //列的开辟 p[i] = new int[col]; } //数据输入 cout<<"请逐个输入 各行各列 数据:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; ++j) { cin>>p[i][j]; } //数据反馈 cout<<"您分配的动态数组为:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; ++j) { cout<<p[i][j]<<""; } //释放内存: delete []p; }
#include <iostream> #include<vector> using namespace std; int main() { int row,col; cout<<"请输入行 & 列:"<<endl; cin>>row>>col; //很复杂的结构:对于某些编译器,注意连空格都不可以忽略 vector<vector<int> > p(row,vector<int>(col)); //数据输入 cout<<"请逐一输入 各行各列 数据:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; j++) { cin>>p[i][j]; } //数据输出 cout<<"您输入的数据:"<<endl; for(int i=0; i<row; ++i) for(int j=0; j<col; j++) { cout<<p[i][j]<<" "; } //该方法利用的是两重的vector而无需释放 }
6、利用while的极其简单输入实现求和、求平均之类算法:
#include <iostream> using namespace std; int main() { int sum=0,value=0; //实际上非数字就会结束循环 cout<<"请输入求和数字,以*号作为结束;" while(cin>>value) sum += value; cout<<"您输入数据之和为:"<<sum<<endl; }
总结:
以上方法有简单的,也有非常复杂而且古老的,用哪个、按照那种思路去做?主要看代码的用处和时间的复杂度要求;
希望大家及时提出交流意见~
希望有更多的知识点给大家分享~
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: sizeof获取数组长度
- 下一篇: php中如何实现将数组中的某个下标的值累计相加