ループ内で配列を宣言することは可能ですか。長さが変わるため、何らかの理由でループの前に宣言できません。ループ内で配列を再宣言/削除できるかどうか疑問に思っています。C++/CLI 言語を使用しています。
質問する
1983 次
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::vector
これが、標準と Microsoft がとを提供した理由ですcli::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() を呼び出して、探している配列を取得することもできます。おそらく最初の方法の方が効率的ですが、2 番目の方法の方が便利です。
于 2013-02-18T07:34:58.300 に答える