如何设置数组的大小等于向量的大小。这是我的代码:
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
我不理解错误。你能提供一些解释吗?
答案 0 :(得分:4)
如错误所示,静态数组的大小在编译时必须是常量。 std::vector
的大小可能会在运行时发生变化,因此不保证数组的大小是恒定的。您必须制作动态数组
int* my_array = new int[data_obj.size()];
请记得在
后删除它delete[] my_array;
答案 1 :(得分:0)
错误C2057:预期的常量表达式
分配数组时,data_obj.size()不是常量,但它应该是 - 这是要求之一。如果你想做这样的事情,你需要动态分配。
错误C2466:无法分配常量大小为0的数组
在这种情况下(当你没有向矢量放任何东西时),它的大小为零。您无法创建大小为0的数组。
答案 2 :(得分:-3)
问题是通过&#34; classic&#34;分配的数组。语法(例如int a [5])在堆栈上分配。因此,您需要在编译时知道数组的大小,因为编译器需要更改SP(堆栈指针)值。 另一方面,向量的内存区域在堆上,就像通过malloc / new分配的数组一样。因此,您可以等到运行时间,知道您需要多少内存,然后分配它。
堆栈/ vs堆分配还有其他优点/缺点:堆栈分配更快,因为你只需要减小寄存器值,但堆栈的大小有限,如果你的阵列太大,你就会结束堆栈溢出异常,这可能会导致奇怪的事情发生像创建一个虫洞倾倒你的硬盘上的整个网站:-)。另一方面,堆更慢,分配/解除分配太多可能会导致碎片存储空间。