2014-04-09 236 views
0

我注意到我的代码有些奇怪,以及它声明和初始化我的二维矩阵所用的时间。2D矩阵声明差异

第一种方式

vector< vector<double> > gblStiff(dOF, vector<double>(dOF, 0)); 

自由度是在代码前面的一些确定的值。当dOF = 30000时,第一种方法大约需要3秒钟!

方式二

double** gblStiff = new double*[dOF]; 
for (i=0; i < dOF; i++) 
    gblStiff[i] = new double[dOF]; 

这第二种方式需要0.063秒为同一DOF !!

任何人都可以阐明为什么会发生这种情况?我非常好奇。

+0

单个连续缓冲区会更快。使用'gblStiff [dOF * row + col]'将其索引(或相反,取决于您的存储顺序和索引定义)。 – Peter

回答

0

这真是一个C++的问题。首先,你可能没有编译优化。 vector模板确实需要一些编译器帮助才能使用。其次,vector的构造函数初始化所有的元素;在你的情况下,它将dOF*dOFdouble s初始化为零。 new double[dOF]没有这样的事情;该内存可以包含任何东西。