0

是否可以在循环内声明数组。由于某些原因,我不能在循环之前声明它,因为它的长度会发生变化。我想知道是否可以在循环中重新声明/删除数组。我正在使用 C++/CLI 语言。

4

2 回答 2

0

原生 c++ 数组,如果它们是在堆栈上分配的,则必须在编译时确定它们的大小,因此如果要使用原生数组,则必须使用new运算符分配它们。

不推荐的解决方案:

int rows = 1000;
int arr[] = new int[rows]; //new array with 1000 integers
int rows = 5;
delete arr; //don't forget to delete the previous allocation before re-sizing
int arr[] = new int[rows]; //new array with 5 integers

然而,这迫使您不断了解分配和取消分配。这就是为什么标准和微软给你std::vectorcli::array.

托管方式:

如果您希望您的阵列位于托管堆上,请使用cli::array:

cli::array<int> ^arr= gcnew cli::array<int>(1000); //new array with 1000 integers
Array::Resize(arr, 5); //resize arr to 5 integers

非托管方式:

如果您希望您的数组位于非托管堆(本机 C++)上,请使用std::vector

std::vector<int> arr(1000); //new array with 1000 integers
arr.resize(5); //resize array to 5 integers
于 2013-02-17T12:22:16.850 回答
0

您可以在每次迭代中使用Array::Resize方法(如 eladidan 所说);或者您可以使用List<>类,在每次迭代中添加项目,最后调用 List<>::ToArray() 来获取您正在寻找的数组。可能第一种方式会更有效,但第二种方式更方便。

于 2013-02-18T07:34:58.300 回答