创建/调整数组的大小......不能使用非常量?
问题描述:
我定义了一个结构作为创建/调整数组的大小......不能使用非常量?
struct Point {
int x, int y
}
我正在传递给函数的点阵列,以及,告诉我该数组有多少元素包含一个整数i。在这个世界中,我可以如何在数组中添加一个元素?我意识到没有办法只是添加新的元素,因为阵列不能动态调整大小,所以我需要创建一个新的元素并复制每个元素......但是当我尝试执行以下操作时:
Point newPoints[i+1];
我被告知它期望一个恒定的值,当然我不能给它,因为我需要i + 1,而且我是可变的。 C++让我难过。 (如果不是很明显,我来自一个神圣的地方,为你管理你所有的物品......)
P.S.我必须使用阵列...忘了提及。
答
怕你必须在这个上使用一个新的/ malloc。我只在运行时确定,所以在编译时它无法静态分配它在堆栈上所需的内存。
答
在标准C++中,您不能创建具有运行时间设置大小的数组。你需要做的一个:
- 声明
newPoints
为指针,然后分配使用new Point[i+1]
值,应用delete []
它以后。 - 声明
newPoints
使用类似boost::scoped_array
,它自动管理清理。 - 使用非数组,例如
std::vector
;你可以使用&v[0]
来得到一个指针。 - 使用非标准扩展名,例如GCC提供的扩展名。
答
你必须使用一个恒定值的原因是正在栈上创建的newPoints
阵列,并做到这一点的编译器必须知道它会如何大,在编译的时候。为了能够指定动态大小,您必须使用new []和delete []或动态数据结构类(如来自STL)。
为什么你必须使用数组? – 2011-04-07 05:17:41
[动态数组]可能的重复(http://*.com/questions/232445/dynamic-arrays) – Aamir 2011-04-07 05:18:40
C++有一个为此设计的std :: vector! – 2011-04-07 07:27:11