我需要一种方法来代表用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