2010-06-25 178 views
1

我必須自己乘一個矩陣,直到矩陣在某種程度上不等於前面的矩陣之一。然後我需要得到矩陣相等的度數值。行數和列數相等。矩陣存儲在一個二維數組中。值是0或1.檢查與以前矩陣相等的最佳方法是什麼?我試圖用vector存儲矩陣:比較矩陣乘法

vector<int[5][5]> m; 

,但我得到一個錯誤cannot convert from 'const int [5][5]' to 'int [5][5]'

等待一個建議。

+0

聽起來像家庭作業。 – 2010-06-25 16:28:12

+0

你應該發佈導致編譯錯誤的代碼片段。 – 2010-06-25 16:28:29

+0

'你在某種程度上'是否指輪換? (或者我只是忘記了這個詞?)這些總是5x5矩陣嗎? – Rup 2010-06-25 16:29:46

回答

3

如果你可以使用boost,看看升壓Matrix類:

它似乎缺少一個==運營商,但它很容易增加:

#include <iostream> 
#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/io.hpp> 

using namespace boost::numeric::ublas; 

template<typename T> 
bool operator==(const matrix<T>& m, const matrix<T>& n) 
{ 
    bool returnValue = 
    (m.size1() == n.size1()) && 
    (m.size2() == n.size2()); 

    if (returnValue) 
    { 
    for (unsigned int i = 0; returnValue && i < m.size1(); ++i) 
    { 
     for (unsigned int j = 0; returnValue && j < m.size2(); ++j) 
     { 
     returnValue &= m(i,j) == n(i,j); 
     } 
    } 
    } 
    return returnValue; 
} 

而像這樣用:

int main() 
{ 

    matrix<double> m (3, 3); 
    for (unsigned int i = 0; i < m.size1(); ++ i) 
    { 
    for (unsigned int j = 0; j < m.size2(); ++ j) 
    { 
     m (i, j) = 3 * i + j; 
    } 
    } 
    std::cout << m << std::endl; 

    matrix<double> n (3, 3); 

    std::cout << (m == n) << std::endl; 
    std::cout << (m == m) << std::endl; 
} 

[Code]

+1

運算符=='缺少,因爲浮點(庫的目標)的等同比較幾乎沒有意義。在任何情況下,都有一個'ublas :: detail :: equals'(弱等式),因爲它允許使用閾值,所以更安全。例如'ublas :: detail :: equals(m1,m2,1.e-6,0)'。或者如果堅持'template bool operator ==(M1 const&m1,M2 const&m2){return detail :: equals(m1,m2,std :: numeric_limits :: epsilon (),std :: numeric_limits :: min());}'(另外,如果尺寸不兼容,可能或可能不是所需的行爲會拋出) – alfC 2014-08-22 08:25:56

+1

用新的gcc說法(版本> 5和/或者C++ 11),'typename'關鍵字是強制性的,上面的函數應該是:'template bool operator ==(M1 const&m1,M2 const&m2){return detail :: equals(m1,m2,std :: numeric_limits :: epsilon(),std :: numeric_limits :: min()); }使用numeric_limits時,您會注意到'typename'關鍵字。 – 2016-05-25 14:32:32

1

如果你想用vector來做,你可能需要vector < vector <int> >,即一個整數的矢量向量(即,一種2維向量)。

vector<int[5][5]>會(如果它工作)聲明2維5x5- int-vectors的向量。