我需要一種方法來代表用C雙打的2 d陣列(緻密基質)++,具有絕對最小訪問開銷。優化C++ 2-d陣列
我已經做了各種Linux/UNIX機器和gcc版本的一些時間。向量的STL向量,聲明爲:
vector<vector<double> > matrix(n,vector<double>(n));
並通過matrix[i][j]
訪問是訪問不是數組聲明爲5%和更慢的100%之間:
double *matrix = new double[n*n];
通過內聯指數函數matrix[index(i,j)]
訪問,其中index(i,j)
評估爲i + n * j。 n個指針的數組的每一行的開始處,或在堆棧上限定整個事情作爲恆定大小matrix[n][n]
- - 運行在幾乎完全相同的速度指數函數法排列2-d陣列而不STL的其它方式。
當開啓優化時,最近的GCC版本(> 4.0)似乎能夠將STL向量向量編譯成幾乎與非STL代碼相同的效率,但這與機器相關。
我想如果可以使用STL,但必須選擇最快的解決方案。有沒有人有使用GCC優化STL的經驗?
我給予好評是的valarray,不一定要做出一個自定義的矩陣類型。那麼,自定義矩陣類型可以工作,但仍然應該基於valarray而不是矢量(valarray支持切片,這使得獲得一列就像獲得一行一樣簡單)。 – 2008-09-30 12:12:56
小心繼承std :: valarray;它不是爲繼承而設計的,因爲大部分的「STL」。 – 2008-09-30 13:15:16
只要不向其中添加數據,就可以繼承任何類的STL,因爲構造函數不會被調用。雖然沒有pb添加方法。 – PierreBdR 2008-09-30 13:33:52