2012-02-08 80 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

這是什麼矩陣類?它有什麼構造函數(你必須設置其大小......)? – 2012-02-08 19:47:44

+0

矩陣是declrades矩陣:typedef vector < vector>矩陣; 然後我想要一個函數返回2矩陣的總和,我的問題是這段代碼不起作用,可能是因爲我必須初始化變量t? – EricJ 2012-02-08 19:50:26

+0

好吧,你是如何創建一個&B? :) – 2012-02-08 19:53:06

回答

2

你需要的東西,如初始化的t的行和列:

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

這將使一個row_countcol_count矩陣填充零。


在一個側面說明有關性能:在一個比較.size() for循環意味着每個迭代前,.size()必須再次計算。你可以節省一點處理的(這對於大型數據集加起來)的預先計算它像這樣:

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

謝謝,問題解決了! – EricJ 2012-02-08 19:57:39

+0

如果解決了您的問題,您可能需要[接受此答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Bart 2012-02-08 21:22:11

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]; 
    } 
} 

我添加了一些斷言來指示您必須滿足哪些前提條件。

要初始化一個矩形陣列,你可以做這樣的事情:

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

在這種情況下,數據集中的向量保證是相同的大小,主要是因爲如果它們不是,它不會是矩陣。 – 2012-02-08 19:56:12

+0

@GigaWatt:儘管如此,您的數據*類型*並未強制執行此結構。您正在描述一個幸運的運行時巧合,而不是利用強類型編譯語言。 – 2012-02-08 19:57:09

+0

謝謝,非常有幫助! – EricJ 2012-02-08 19:58:58