有关于c++中设置动态数组长度的问题,新手求教!

宇明君寻 2012-03-06 09:38:35
看到书本上这么定义过:
"数组定义的形式为 类型名 数组名[常量表达式](e.g:int a[10])"

而不允许对数组的大小做动态的定义,技术组的大小不依赖于程序运行过程中变量的值.例子,如果像下面定义数组是不行的:

int a;
cin>>a;//输入a数组的长度
int a[n];//试图用n来决定数组的长度


在网上查了一下,大部分人给出的办法是不使用这样的数组,而用一个链表或者封装好的类如java中的Vector来解决..

于是自己有以下几个问题想请教前辈们:
1.c++/c中这种情况是独有的,还是其他高级语言也会有这样的情况?(如java?)
2.之所以出现这样的情况,是否是因为c++编译器的原因,在底层的实现中,数组的存放与堆还有栈的机制有关?
3.除了链表或封装好的类,有无其他一般性解决办法?
比如若想实现"一共输入n个数,并对其进行如sort,之间的元素搬移,或者search之类的操作,"若不封装类,只用数组,有何 好的办法么?

以上,请求指点!


...全文
436 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peng4Wang1 2012-03-06
  • 打赏
  • 举报
回复
用链式存储结构试一下。支持用泛型算法
Kevin_Perkins 2012-03-06
  • 打赏
  • 举报
回复
只要是编译型方式生成可执行程序,在编译器就要确定数组的大小,当然不可以用变量。因为在程序运行时,这个数组不是在堆上创建,而是在栈上创建。解决此问题,首先想到的办法是在堆上维护动态数组,但此方法需要自己维护内存的使用,安全性不高。因此可以用STL中的容器来管理。STL的容器与算法配合,可以实现各种需要的功能。
xiyoulaoyuanjia 2012-03-06
  • 打赏
  • 举报
回复
1.动态数组实际上并不是一个严格意义上的数组,
它是先声明一个指针,再以它只想一个后来分配的连续存储空间。
这个实际上是一个连续存储的链表的实现。
2.编译器需要在编译的时候确定大小 这个与数组的存放与堆还有栈的机制好像无关,自己感觉数组时存放在栈上的。
3.可以采用new 模拟动态数组。
4.采用泛型算法,传入指针范围即可!
面包大师 2012-03-06
  • 打赏
  • 举报
回复
int *a = new int[n];//这样a就可以看做是一个有n个元素的一维数组了
muyi66 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 rocklee_1227 的回复:]
看到书本上这么定义过:
1.c++/c中这种情况是独有的,还是其他高级语言也会有这样的情况?(如java?)
2.之所以出现这样的情况,是否是因为c++编译器的原因,在底层的实现中,数组的存放与堆还有栈的机制有关?
3.除了链表或封装好的类,有无其他一般性解决办法?
比如若想实现"一共输入n个数,并对其进行如sort,之间的元素搬移,或者search之类的操作,"若不封装类,只用数组,有何 好的办法么?
[/Quote]1、只是一些语言里如此。比如Java和C#就没这个问题。

2、是在语言定义时决定好的,主要原因还是实现问题。局部变量都被放置在栈里,而栈空间通常都是非常有限的。

3、在不知道会有多大需求的情况下就只有2种解决方式:要么你就给个非常大的值,让应用不会超过它;要么就用动态数据结构,不去申请栈空间。
宇明君寻 2012-03-06
  • 打赏
  • 举报
回复
先谢谢楼上的几位朋友!基本的问题已经解决了!!受教了!
[Quote=引用 3 楼 kevin_perkins 的回复:]

只要是编译型方式生成可执行程序,在编译器就要确定数组的大小,当然不可以用变量。因为在程序运行时,这个数组不是在堆上创建,而是在栈上创建。解决此问题,首先想到的办法是在堆上维护动态数组,但此方法需要自己维护内存的使用,安全性不高。因此可以用STL中的容器来管理。STL的容器与算法配合,可以实现各种需要的功能。
[/Quote]
就是一楼的方案是在堆里进行维护是么?stl容器是标准类库常用的一部分么?另外:若是像java这样是逐条翻译指令,而不进行编译的语言(而且也没有指针)的语言,似乎就不需要这么干,能够由输入的n确定一个长度为n数组,这又是怎么回事呢?

以后如果像c这样类库不甚完整的语言,是否只能够用自己手动进行管理?再次谢谢了!
screwzm 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 czh3642210 的回复:]

C/C++ code
int *a = new int[n];//这样a就可以看做是一个有n个元素的一维数组了
[/Quote]
+

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧