读书人

有关于c++中设置动态数组长度的有关问

发布时间: 2012-04-16 16:20:04 作者: rapoo

有关于c++中设置动态数组长度的问题,新手求教!
看到书本上这么定义过:
"数组定义的形式为 类型名 数组名[常量表达式](e.g:int a[10])"

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

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


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

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

以上,请求指点!




[解决办法]
C/C++ code
int *a = new int[n];//这样a就可以看做是一个有n个元素的一维数组了
[解决办法]
1.动态数组实际上并不是一个严格意义上的数组,
它是先声明一个指针,再以它只想一个后来分配的连续存储空间。
这个实际上是一个连续存储的链表的实现。
2.编译器需要在编译的时候确定大小 这个与数组的存放与堆还有栈的机制好像无关,自己感觉数组时存放在栈上的。
3.可以采用new 模拟动态数组。
4.采用泛型算法,传入指针范围即可!
[解决办法]
只要是编译型方式生成可执行程序,在编译器就要确定数组的大小,当然不可以用变量。因为在程序运行时,这个数组不是在堆上创建,而是在栈上创建。解决此问题,首先想到的办法是在堆上维护动态数组,但此方法需要自己维护内存的使用,安全性不高。因此可以用STL中的容器来管理。STL的容器与算法配合,可以实现各种需要的功能。
[解决办法]
探讨
看到书本上这么定义过:
1.c++/c中这种情况是独有的,还是其他高级语言也会有这样的情况?(如java?)
2.之所以出现这样的情况,是否是因为c++编译器的原因,在底层的实现中,数组的存放与堆还有栈的机制有关?
3.除了链表或封装好的类,有无其他一般性解决办法?
比如若想实现"一共输入n个数,并对其进行如sort,之间的元素搬移,或者search之类的操作,"若不封装类,只用数组,有何 好的办法么?

读书人网 >C++

热点推荐