我需要一种方法来表示 C++ 中双精度数的二维数组(密集矩阵),并且访问开销绝对最小。
我在各种 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。在没有 STL 的情况下安排二维数组的其他方法——一个指向每行开头的 n 个指针的数组,或者将堆栈上的整个事物定义为一个常数大小matrix[n][n]
——以与索引函数方法几乎完全相同的速度运行。
最近的 GCC 版本 (> 4.0) 似乎能够在打开优化时将 STL 向量的向量编译到与非 STL 代码几乎相同的效率,但这在某种程度上取决于机器。
如果可能,我想使用 STL,但必须选择最快的解决方案。有没有人有使用 GCC 优化 STL 的经验?