在C++中實現二維數組的最省時的方法是什麼?我很關心:插入,刪除和查找。用C++實現二維數組的最省時的方法?
我看了一下這兩種方法:
vector<vector<int>>
- 嵌套向量vector<vector<int>*>
- 矢量與指向其他載體
我發現的第一個選項是很容易實現,但是還有另一種更省時的方法嗎?
在C++中實現二維數組的最省時的方法是什麼?我很關心:插入,刪除和查找。用C++實現二維數組的最省時的方法?
我看了一下這兩種方法:
vector<vector<int>>
- 嵌套向量vector<vector<int>*>
- 矢量與指向其他載體我發現的第一個選項是很容易實現,但是還有另一種更省時的方法嗎?
我的建議:
Matrix
。std::vector
開始 - 一個1D數組。以初始化矩陣大小MxN
,所有你需要做的是:
std::vector<std::vector<dataType>> MyMat = std::vector<std::vector<dataType>>(M,std::vector<dataType>(N,0));
然而,我不得不提,這就是創建一個矩陣可怕的方式。通過這種方式編寫矩陣可以使性能下降。這是因爲當您執行矩陣乘法時,您的處理器使用稱爲vectorization
的東西在一條指令中將多個數字相乘,並且在執行此操作時使處理器變得更加困難。此外,這將殺死緩存局部性,因爲不同的行(或列)不會在內存中連續存在,從而使所有內容都可能放慢幾百倍。
做到這一點,正確的方法是用矢量創建一個類(大概):
std::vector<dataType> MyMat(M*N,0);
然後創建將由元素訪問元素的訪問:
dataType& getElement(int i, int j)
{
return MyMat[M*i+j];
}
這樣你獲得最佳表現。當然,還有更多關於性能的細節,但這足以回答你的問題。
順便說一下,你不應該自己做矩陣操作。在最好的情況下,如果你是一個專業的高性能開發者,你應該使用一些LAPACK實現爲你做矩陣操作(就像Armadillo那樣的人)。
這種技術'矢量矩陣[大小]'你可以按照。 –
您可能對[Blaze](https://bitbucket.org/blaze-lib/blaze)或[Eigen](http://eigen.tuxfamily.org/index.php?title=)等線性代數庫感興趣主頁)。 –