2012-02-08 21 views
0

2つの行列が与えられた関数は両方の和を返します。問題は行列 't'をどのように初期化するかであると思います。平方和行列の和

#include <iostream> 
#include <vector> 

using namespace std; 
typedef vector< vector<int> > Matrix; 
    Matrix sum(const Matrix&a,const Matrix&b){ 
      Matrix t; 
      for(int i=0;i<a.size();i++) 
       for(int j=0;j<a.size();j++) 
        t[i][j] = a[i][j] + b[i][j]; 


      return t; 
    } 
+0

何がこの行列クラスですか?これは、次のように計算されます:(大量のデータセットを追加する)少しの処理を保存することができますか?どのようなコンストラクタがありますか(サイズを設定する必要があります...)? –

+0

行列は行列として宣言されています:typedef vector < vector>行列; 次に、与えられた2つの行列の和を返す関数が必要です。私の問題は、このコードが機能しないということです。おそらく変数tを初期化する必要があるからでしょうか? – EricJ

+0

よく、&bをどうやって作りましたか? :) –

答えて

2

をあなたのような何かをtの行と列を初期化する必要がありますrow_countによってcol_countマトリックスがゼロで満たされる。パフォーマンスに関するサイドノートで


:forループで.size()に比較は、各反復の前に、.size()が再計算されなければならないことを意味します。

for (int row = 0, row_ct = mat.size(); row < row_ct; ++row) 
+0

ありがとう、問題解決! – EricJ

+0

これで問題が解決した場合は、[この回答を受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)が必要な場合があります。 – Bart

0

あなたは、一般的に設定された矩形データを持っていない:各a[i]はおそらく異なる長さのベクトルです。事実、長方形の格子を持つように気をつけていたら、forループはまだオフです。

for (int i = 0; i < a.size(); i++) 
{ 
    assert(a.size() <= b.size() && a.size() <= t.size()); 

    for (int j = 0; j < a[i].size(); j++) // !! 
    { 
     assert(a[i].size() <= b[i].size() && a[i].size() <= t[i].size()); 
     t[i][j] = a[i][j] + b[i][j]; 
    } 
} 

私は、あなたが満足しなければならない前提条件を示すいくつかのアサーションを追加しました。長方形の配列を初期化するには

、あなたはこのような何か行うことができますようになります

Matrix t = vector< vector<int> >(row_count, vector<int>(col_count, 0)); 

std::vector<std::vector<int>> v(n_rows, std::vector<int>(n_cols, 0)); 
+0

この場合、データセットのベクトルは同じサイズであることが保証されています。主な違いは、マトリックスではないためです。 –

+0

@GigaWatt:あなたのデータ*タイプ*はこの構造を強制しません。強く型付けされコンパイルされた言語を利用するのではなく、幸運なランタイムの偶然性を記述しています。 –

+0

ありがとう、非常に役立つ! – EricJ