- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《定义不定长数组
C++中如何定义一个元素个数不确定的数组方法一:在C++中实现变长数组 1.变长一维数组这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做:
//文件名: array01.cpp
#includeiostream
using namespace std;
int main()
{
int len;
cinlen;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p=new int[len];
...........
delete[] p;
return 0;
}
复制代码
注意int *p=new int[len];这一句,你不能这样做:int p[len];C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:int p[]=new int[len];编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len];array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组:
//文件名: array02.cpp
#includeiostream
#includevector
using namespace std;
int main()
{
int len;
cinlen;
vectorint array(len);//声明变长数组
for(int i=0;ilen;i++)
{
array=i;
coutarray\t;
}
return 0;
}
复制代码
这里的变长数组让我联想到了java的java.util包中的vector和C#中的ArrayList,它们也可以在各自的语言中实现变长数组。不过C ++中的vector不能像C#一样有托管的垃圾回收机制回收被占用的内存空间,但是你可以在使用完vector后调用~vector()析构函数释放内存。2.变长n维数组变长的n维数组实现起来有些麻烦,但是在工程与软件设计应用中常使用的是二维数组,所以在这里着重介绍变长的二维数组,变长的n维数组可以按照类似的方法实现。首先看一个经典的用C实现变长二维数组的例子:
//文件名: array03.c
#include stdio.h
#include malloc.h
void main()
{
int x,y,i,j;
float **a,*b;
printf(请输入你所求解的线性方程组的行数x:x=);
scanf(%d,x);
printf(请输入你所求解的线性方程组的列数y:y=);
scanf(%d,y);
a=(float **)malloc(sizeof(float *) *x);
b=(float *)malloc(sizeof(float) *x);
for(i=0;ix;i++)
{
*(a+i)=(float *)malloc(sizeof(float) *y);
}
/*读入数据*/
printf(请按行的顺序依次输入系数的值(共%d项):,x*y);
for(i=0;i=x-1;i++)
for(j=0;j=y-1;j++)
scanf(%f,a[j]);
printf(请按列的顺序依次输入常数的值(共%d项):,x);
for(j=0;j=x-1;j++)
scanf(%f,b[j]);
printf(您输入方程组的增广矩阵为:\n);
for(i=0;i=x-1;i++)
{
for(j=0;j=y-1;j++)
printf(%.5f ,a[j]);
printf(%.5f ,b);
printf(\n);
}
free(;
for(i=0;ix;i++)
free (*(a+i));
}
复制代码
那么用C++怎样实现呢?在C++中可以通过new和delete运算符动态开辟和释放空间,其中new与C中malloc函数的功能相似,delete与 C中free函数的功能相似。用C++实现变长二维数组时可以采用两种方法:双指针方法和使用STL中vector(向量)的方法。首先介绍一下双指针方法,在这里双指针就是指像指针的指针,比如你可以这样声明一个数组:int **p = new int*[num1];而对每一个*p(一
您可能关注的文档
- 《宋朝官制.doc
- 《宋椤2014年国培心得体会副本.doc
- 《宋氏来源发展变迁.doc
- 《宋氏飞盘授课资料.doc
- 《宋莉评审表.doc
- 《宋词中的酒文化赏析.doc
- 《宋诗苏轼与黄庭坚诗歌比较.doc
- 《宋进礼体育舞蹈论文论文40910011.doc
- 《宋雅芳王的:论精神损害之国家赔偿——兼评国家赔偿法之修改.doc
- 《完全小学教育技术装备标准Ⅱ.doc
- 2025年江苏徐州医科大学招聘60人笔试模拟试题及完整答案详解1套.docx
- 2025年江苏徐州医科大学招聘60人笔试模拟试题及参考答案详解1套.docx
- 临床儿科学试题库及答案2025版.docx
- 2025至2030全球及中国人才获取软件行业市场深度研究及发展前景投资可行性分析报告.docx
- 临床法规面试题目及答案2025版.docx
- 2025年江苏盐城滨海县校园招聘教师127人(第一批次)笔试模拟试题带答案详解.docx
- 临床传染病考试题及答案2025版.docx
- 临床春招考试题型及答案2025版.docx
- 2025至2030全球及中国人工智能诊断行业市场深度研究及发展前景投资可行性分析报告.docx
- 2025年江苏徐州医科大学附属医院博士专项招聘64人笔试模拟试题及参考答案详解.docx
最近下载
- 耕地质量等级+(GBT+33469-2016).docx VIP
- 人教版高中物理必修一课件.pptx VIP
- 新生儿高胆红素血症诊治指南(2025)解读 (1)PPT课件.pptx VIP
- 《新生儿高胆红素血症诊治指南(2025)》解读(1)PPT课件.pptx VIP
- SGT756国电南自保护培训全解.ppt VIP
- 建设工程工程量清单计价办法(市政工程定额章节说明).pdf VIP
- 盘扣模板支撑体系技术交底(二级).docx VIP
- 精创温控器EK-3010说明书用户手册.pdf
- 外墙涂料施工安全技术交底.doc VIP
- 在线网课学习课堂《舰艇操纵与避碰》单元测试考核答案.docx VIP
文档评论(0)