2017-02-27 10 views
-1

ユーザ入力に応じて配列の数を作成するプログラムを学びました。しかし今、行列の要素を保存するために行列の配列(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; 
} 
+0

ためのリファレンスです::ベクトル<はstd ::ベクトル<はstd ::ベクトルは>>'わずか数にこれを削減しますより安全なコードにすることができます。 'new []'を使ってコードに重大な欠陥があるのは、 'new []'がその作成ロジックの途中で例外をスローする場合、 'delete []'を呼び出すことによってどのように "ロールバック"するのでしょうか? – PaulMcKenzie

答えて

0

まず、PaulMckenzieは右の彼らのコメントで、あなたが本当に直接ヒープポインタを使用する代わりにのstd ::ベクトルを使用する必要がありますされ、それははるかに簡単です。

また、あなたの問題が本当にわからなかったので、ここにいくつかのコメントがあります。

各行の要素数が異なる場合、これはどのように行列になりますか?これは単なる概念的なものですが、今のところそれは単なるリストです。それがあなたが欲しかったのであれば、行列を望むなら次元を厳しくする必要があります。

客観的にコードに間違いはありませんが、私はこの質問が本当にここに属していないと言います。コードに問題はありません。問題が何であるかを明示してください。

編集:私は本当に私はあなたが練習をしたい場合だけではstdを使用して行列クラスを作ると言うでしょう、あなたは行列のためにそれを適応したい参照::ベクトル

編集:私は程度である行列のクラスを作成する意味は何文字通りその。与えられたディメンソンの行列のすべての一般的な演算を扱う行列クラス型を定義すると、メインは行列を作成するためのループと繰り返しのためにすべてのものを必要とします。あなたはここに std::vector<Matrix> matricies; matricies.push_back(Matrix(2,3))

でそれらを格納します `STDを使用してC++クラスhttp://www.cplusplus.com/doc/tutorial/classes/

+0

基本的には、ユーザー入力に基づいて行列の数を定義(作成)し、要素を格納するプログラムが必要です。 –

+0

ユーザーは、4つの行列を作成したいと入力し、ユーザー入力に応じて行列を作成する必要があります。次に、ユーザは、作成された行列に要素を格納する –

関連する問題