2014-10-02 173 views
1

我有一個矩陣類,它看起來是這樣的:如何在一個類中初始化二維數組?

template<int R, int C> 
class Matrix{ 
public: 
    double matrix[R][C]; 
    Matrix(double n = 0)...{} 
    ... 
}; 

Matrix<2,3> m; 

創建與在c'tor的n一個新的矩陣時,不通過細胞遍歷整個陣列細胞如何初始化數組?

我在這裏閱讀了一些關於memset的回答,但目前我無法使用它(這是家庭作業的一部分)。

+1

它初始化到什麼, 「默認」 或一個特定的值? – Niall 2014-10-02 11:09:58

+0

我已經提到過,我想用'n'來初始化它作爲c'tor的輸入(默認值爲0) – littlerunaway 2014-10-02 11:11:30

+0

您可以使用標準算法,但它們會在後臺應用某種形式的迭代無論如何。否則你扮演你自己的角色。在這種情況下''memset'可以工作,但正如你所說,這不在桌面上。 – Niall 2014-10-02 11:15:38

回答

0

使用清晰,簡單,明顯的代碼迭代整個數組單元格。如果你的編譯器是合理的(爲什麼不使用它),它就會明確地理解你正在做什麼,並取代你的平臺的最佳初始化機制。

+0

這是唯一的方法嗎?我希望有一些快捷方式可以做到這一點 – littlerunaway 2014-10-02 11:14:27

+0

「快捷方式」是什麼意思?你的意思是少代碼? – 2014-10-02 11:15:08

+0

我的意思是我可以做這樣的'int a [2] [3] = {0}',我知道它會將數組初始化爲0,我希望有一種方法可以當它進入類 – littlerunaway 2014-10-02 11:18:36

1

我的建議是使用std算法儘可能:

std::for_each(std::begin(matrix), std::end(matrix), 
       [n](double* row) { std::fill_n(row, C, n); });  

完整的示例:

template<int R, int C> 
class Matrix{ 
public: 
    double matrix[R][C]; 
    Matrix(double n = 0) { 
     std::for_each(std::begin(matrix), std::end(matrix), 
         [n](double* row) { std::fill_n(row, C, n); });  
    } 
};