2013-04-02 55 views
0

有一個簡單的函數,用於創建存儲在數組中的零填充矩陣。在C++中將原始指針更改爲智能

void zeroMatrix(const int rows, const int columns, void* M) 
{ 
    for(int i = 0; i < rows; i++) 
     for(int j = 0; j < columns; j++) 
      *(((double *)M) + (rows * i) + j) = 0; 

} 

如何更改代碼使用std::unique_ptr<double>作爲M?

+4

爲什麼'M'一個'無效* 「目前呢? –

+4

你不需要'unique_ptr'函數,只在外面。因爲你的函數不支持矩陣的所有者 – kassak

+0

@sftrabbit試圖將它用於一些其他類型以及用於double。 –

回答

2

由於沒有過戶到zeroMatrix功能,你需要的是一個參考

(假設M是一個向量)

void zeroMatrix(const int rows, const int columns, std::vector<double> &M) 
{ 
    for(int i = 0; i < rows; i++) 
     for(int j = 0; j < columns; j++) 
      M[(rows * i) + j] = 0; 

} 
+1

請記住,這僅僅是爲了示例,並且有更好的方法來設置向量(或其數組)中的所有元素,爲0. – slaphappy

+0

非常感謝。你可以添加其中一個更好的方法來解釋你的答案嗎? –

+0

@PavelOganesyan這與問題無關,所以我會在這裏發佈:'M = std :: vector (M.size());'' – slaphappy