ユーザ入力に応じて配列の数を作成するプログラムを学びました。しかし今、行列の要素を保存するために行列の配列(2D)を作成する状況が必要です。ループイテレータの後に名前が付けられた行列の動的配列を作成する
ユーザーは、必要な行列の数と個々の行列のサイズを入力し、それぞれの数を入力する必要があります。
ここで私が学んだ通常のコードです。私はそれが行列に使えるようにしたい。
#include <iostream>
int main()
{
unsigned int n;
std::cout << "Enter number of arrays: ";
std::cin >> n;
double** array = new double*[n];
unsigned int* sizeOfInnerArrays = new unsigned int[n];
for (int i = 0; i < n; ++i)
{
std::cout << "Enter size of array " << i << ": ";
std::cin >> sizeOfInnerArrays[i];
array[i] = new double[sizeOfInnerArrays[i]];
for (int j = 0; j < sizeOfInnerArrays[i]; ++j)
{
int element;
std::cout << "Enter element " << j << " of array " << i << ": ";
std::cin >> element;
array[i][j] = element;
}
}
//prints out each array as curly-brace enclosed sets of doubles
for (int i = 0; i < n; ++i)
{
std::cout << "{";
for (int j = 0; j < sizeOfInnerArrays[i] - 1; ++j)
{
std::cout << array[i][j] << ", ";
}
std::cout << array[i][sizeOfInnerArrays[i] - 1] << "}" << std::endl;
}
// free dynamically allocated memory
for (int i = 0; i < n; ++i)
{
delete [] array[i];
}
delete[] array;
delete[] sizeOfInnerArrays;
return 0;
}
ためのリファレンスです::ベクトル<はstd ::ベクトル<はstd ::ベクトルは>>'わずか数にこれを削減しますより安全なコードにすることができます。 'new []'を使ってコードに重大な欠陥があるのは、 'new []'がその作成ロジックの途中で例外をスローする場合、 'delete []'を呼び出すことによってどのように "ロールバック"するのでしょうか? –
PaulMcKenzie