2011-01-23 119 views
4

我試圖將vector<vector<double> >類型的變量傳遞給函數F(double ** mat, int m, int n)。 F函數來自另一個庫,所以我沒有選擇更改它。有人能給我一些提示嗎?謝謝。C++ vector <vector <double>>加倍**

回答

7

vector<vector<double> >double**是完全不同的類型。但它有可能與存儲了一些雙指針另一個向量的幫助養活這個功能:

vector<vector<double> > thing = ...; 
vector<double*> ptrs (thing.size()); 
for (unsigned i=0, e=ptrs.size(); i<e; ++i) { 
    ptrs[i] = &(thing[i][0]); // assuming !thing[i].empty() 
} 
your_function(&ptrs[0],...); 

之一的這部作品的原因是因爲的std ::矢量保證所有的元素都consecutivly存儲在內存中。

+0

@Daniel:已更正 – Novelocrat

1

我看到它的方式,你需要你的vector<vector<double> >轉換爲正確的數據類型,複製所有值到一個嵌套數組中

載體在一個完全不同的方式不是一個數組舉辦的過程中,所以即使你可以強制數據類型匹配,它仍然無法工作。

不幸的是,我的C++經驗在幾年前,所以我不能給你一個具體的例子。

1

向量<向量<雙>>與m的雙指針幾乎不相同。從它的外觀來看,m被假定爲二維陣列,而矢量可以鋸齒狀存儲並且不一定在存儲器中相鄰。如果要傳遞它,則需要將矢量值複製到temp 2dim double數組中,以代替該值。

相關問題