如何设置我的数组大小等于我的矢量大小。这里是我的代码:如何将矢量大小分配给数组大小C++?
vector<Point> data_obj;
int my_array[data_obj.size()]
,但我得到编译错误说:
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
我不理解的错误。你能否提供一些解释?
如何设置我的数组大小等于我的矢量大小。这里是我的代码:如何将矢量大小分配给数组大小C++?
vector<Point> data_obj;
int my_array[data_obj.size()]
,但我得到编译错误说:
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
我不理解的错误。你能否提供一些解释?
正如错误所述,静态数组的大小在编译时必须保持不变。在运行时可能会改变std::vector
的大小,所以数组的大小不能保证是恒定的。你必须做一个动态数组
int* my_array = new int[data_obj.size()];
记住后
delete[] my_array;
尽管制作动态数组的更好方法是'std :: vector
@MikeSeymour这就是这些问题总是倾向于平息的方式。 “我需要一个数组,其大小在编译时不知道,而且在运行时不是恒定的”。所以只需使用矢量!然而,他们从一个矢量开始......所以我们似乎正在倒退:P – CoryKramer 2014-12-03 13:40:23
@Cyber在行之间读取他们可能实际需要的是std :: vector :: data() – sjdowling 2014-12-03 13:50:12
错误C2057将其删除:预计常量表达式
data_obj.size()不是恒定的,当你分配一个数组,但它应该是 - 这是要求之一。如果你想做这样的事情,你需要动态分配。
错误C2466:不能在这种情况下分配不变的尺寸0
的阵列(当没有把任何东西到向量),它的大小是零。您不能创建大小为0的数组。
你可以创建一个大小为0的数组,但不是静态的:'int * my_array = new int [0];'。 – Noel 2014-12-03 13:40:54
问题在于,通过“经典”语法(例如int a [5])分配的数组在堆栈上分配。因此,编译时需要知道数组的大小,因为编译器需要更改SP(堆栈指针)值。另一方面,vector的内存区域在堆上,就像通过malloc/new分配的数组一样。因此,您可以等待运行时间,以了解您需要多少内存并相应地分配内存。
堆栈/ vs堆分配也有其他优点/缺点:堆栈分配速度更快,因为你只需要减少一个寄存器值,但堆栈的大小是有限的,如果你的数组太大,你最终会堆栈溢出异常,这可能会导致奇怪的事情发生,如创建一个蠕虫洞倾倒HDD上的整个网站:-)。另一方面堆太慢了,太多的分配/释放可能导致片段内存空间。
你不能。 C++中数组的大小需要在编译时知道。无论如何你为什么需要这个?只要继续使用矢量。如果您需要底层数组,请执行'&data_obj [0]'或调用'data_obj.data()'。 – Borgleader 2014-12-03 13:35:33
我只是试图将数组大小设置为等于矢量大小,因此每当矢量数据增加时,数组大小就会随之调整。 – 2014-12-03 13:39:37
@ArsalanSherwani ...阵列不调整。这就是'std :: vector'的用途(为什么你一般使用它)。 – crashmstr 2014-12-03 13:40:26