2013-02-16 199 views
0

是否可以在循環內聲明數組?由於某些原因,我不能在循環之前聲明它,因爲它的長度發生了變化。我想知道如果我可以重新聲明/刪除循環內的數組。我正在使用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

回答

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 
0

您可以在每次迭代中使用Array::Resize方法(如eladidan所述);或者您可以使用List<>類,在每次迭代中添加項目,並最終調用List <> :: ToArray()以獲取要查找的數組。可能第一種方法會更有效率,但第二種方法更方便。