创建/调整数组大小...不能使用非常数?

时间:2011-04-07 05:14:59

标签: c++

我有一个定义为

的结构
struct Point {
int x, int y
}

我得到一个传入函数的Points数组,以及一个告诉我数组包含多少元素的整数i。我怎么能在数组中添加一个元素呢?我意识到没有方法只添加新元素,因为数组不能动态调整大小,所以我需要创建一个新元素并复制每个元素...但是当我尝试执行以下操作时:

Point newPoints[i+1];

我被告知它期望一个恒定的值,当然我不能给它,因为我需要i + 1,而且我是可变的。 C ++让我难过。 (如果不是很明显,我来自一个神圣的人为你管理所有物品的土地......)

P.S。我必须使用数组...忘了提及。

3 个答案:

答案 0 :(得分:2)

在标准C ++中,您无法创建具有运行时设置大小的数组。您需要执行以下操作之一:

  1. newPoints声明为指针,然后使用new Point[i+1]分配值,稍后再应用delete []
  2. 使用newPoints之类的内容声明boost::scoped_array,自动管理清理。
  3. 使用非数组,例如std::vector;您可以使用&v[0]从中获取指针。
  4. 使用非标准扩展程序,例如GCC提供的扩展程序。

答案 1 :(得分:0)

害怕你不得不在这个上使用new / malloc。我只是在运行时确定,因此在编译时它无法静态分配堆栈所需的内存。

答案 2 :(得分:0)

必须使用常量值的原因是正在堆栈上创建newPoints数组,为此,编译器必须知道它在编译时的大小。为了能够指定动态大小,您必须使用new []和delete [],或动态数据结构类(例如来自STL)。