在循环中声明数组

问题描述:

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

+1

您能否向我们展示代码。所以我们可以更好地理解问题 – asifsid88 2013-02-16 19:25:44

+0

我不确定我是否理解你想知道的。你可以在循环中声明(定义)一个数组,但是你将无法在循环之外的任何地方使用它。你也可以在循环外部声明数组并创建它(例如,通过调用new ...),在这种情况下,只要声明所在的范围就可以使用它。 – 2013-02-16 19:30:16

+0

到目前为止,我的代码大约有1000行。让我以另一种形式提问我的问题。我可以更改声明数组的行号吗?我将在for循环之前声明一个数组,并在每个循环中更改行数。 – 2013-02-16 19:37:33

原生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 

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