您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > c++与cy语言动态开辟二维数组的多种方法
c++与c动态开辟二维数组的方法c++近日写到一个程序,用到了要动态开辟二维数组,一想,自己就会两种。一者:用new在堆上开辟;二者:用vector开辟。技巧没有多少,但是确实是折腾了我半天!首先,大家去网上搜一下,动态开辟二维数组的文章特别多,再加上我这篇就更多了,我本不想写这篇博文的。但看了网上各位“大虾”“大牛”写的,觉得还是有必要写一下!给各位讲清楚点,以防被网上质量残次不齐的文章误导了。写文章者,都是学习总结之用!为了是自己的快活,也为了别人的参考方便。那我想在就讲讲我经常用到的两种方法;一:C++new法首先贴出我写的一个小小的代码吧!以供大家评论!代码都经本人在VC++6.0上编译运行过,无错!至于有高手再能找出bug,那就给我提出来吧,我也进步,进步!#include#includeusingnamespacestd;voidmain(){introw,col;int**element=NULL;cinrowcol;//动态开辟数组element=newint*[row];for(inti=0;irow;i++){element[i]=newint[col];}//输入数组coutendl;for(i=0;irow;i++){for(intj=0;jcol;j++){cinelement[i][j];}}//输出数组coutendl;for(i=0;irow;i++){for(intj=0;jcol;j++){coutsetw(5)element[i][j];}coutendl;}}关键之处我用红笔标绘出来了!大家肯定一看就懂了!但是,有时对于新手来说,确实很懵懂的。开辟一维数组是何等简单,但是二维数组还是用开辟一维数组的思想!程序不足之处是没有销毁开辟的空间!那大家在看看销毁的代码吧!//销毁空间for(i=0;irow;i++){delete[]element[i];element[i]=NULL;}delete[]element;element=NULL;这是销毁开辟的空间的代码!用new在堆上开辟的空间,必须要用delete释放了,不然要出现内存泄露了!二:vector法学习C++,就不得不学习STL了。用vector开辟二维数组也不失为一个好办法!首先看一段代码!#include#include#includeusingnamespacestd;voidmain(){introw,col;cout请输入行列值:;cinrowcol;vectortest(row,vector(col));//声明一个二维数组,注意这里的空格不能少//初始化,其实不初始化也是可以的,vector默认是0for(inti=0;irow;i++){for(intj=0;jcol;j++){test[i][j]=0;}}coutendl;//输出值for(i=0;irow;i++){for(intj=0;jcol;j++){coutsetw(5)test[i][j];}coutendl;}//输出行列值cout行:test.size()endl;cout列:test[1].size()endl;}编译时两次调用vector的构造函数对象test,第一次调用构造一个无名的含有col个0的vector对象.第二次调用构造函数,以这个无名向量为初始值初始化它的row个元素!C语言使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。示例代码,分配3行4列二维数组:#includestdio.h#includemalloc.hintmain(){int**a;inti,j;a=(int**)malloc(sizeof(int*)*3);//为二维数组分配3行for(i=0;i3;i++i){//为每列分配4个大小空间a[i]=(int*)malloc(sizeof(int)*4);}//初始化for(i=0;i3;++i){for(j=0;j4;++j){a[i][j]=i+j;}}//输出测试for(i=0;i3;++i){for(j=0;j4;++j){printf(%d,a[i][j]);}printf(\n);}//释放动态开辟的空间for(i=0;i3;++i){free(a[i]);}free(a);return0;}/*输出:012312342345*/自我测试#includestdio.h#includeiostream.h#includestdlib.h#includeconio.h#includewindows.hintmain(){introw,col;int**element=NULL;cinrowcol;//动态开辟数组element=newint*[row];for(inti=0;irow;i++){element[i]=newint[col];}//输入数组coutendl;for(i=0;irow;i++){for(intj=0;jcol;j++){cinelement[i][j];}}//输出数组coutendl;for(i=0;irow;i++){for(intj=0;jcol;j++){coutelement[i][j];}coutendl;}for(i=0;irow;i++){delete[]element[i];element[i]=NULL;}delete[]element;element=NULL;#if0intn=0,m=0,i=0,j=0;int**p=NULL;printf(请输入行数n和列数m);cinnm;p=newint*[n];for(i=0;in;i++){p[i]=newint[m];}float**p=(float**)malloc(n*sizeof(float*));for(i=0;in;i++){p[i]=(float*)malloc(m*sizeof(float));}for(i=0;im;i++){free(p[i]);}free(p);p=NULL;for(i=0;in;i++){printf(\t\t\t\t\t\t\t);for(j=0;jm;j++)scanf(%f,&p[i][j]);}for(i=0;in;i++){printf(\t\t\t\t\t\t\t);for(j=0;jm;j++)printf(%5.2f,p[i][j]);printf(\n);}for(i=0;in;i++){delete[]p[i];p[i]=NULL;}delete[]p;p=NULL;#endifreturn0;}
本文标题:c++与cy语言动态开辟二维数组的多种方法
链接地址:https://www.777doc.com/doc-2901567 .html