2012-12-31 109 views
0

你能告诉我哪个函数能更快地工作吗?或者他们都是错误的,你知道更好的方法来做到这一点。提前致谢。在这种情况下,哪种索引方式最合适?

double* solveDiagonal(double* A, double* B, int n) 
{ 
    double* X = new double[n]; 

    for(int i = 0; i < n; i++) 
     X[i] = B[i]/A[i*n + i]; 

    return X; 
} 


double* solveDiagonal(double* A, double* B, int n) 
{ 
    double* X = new double[n]; 
    double** pA = new double*[n]; 

    for(int i = 0; i < n; i++) 
     pA[i] = &A[i*n]; 

    for(int i = 0; i < n; i++) 
     X[i] = B[i]/pA[i][i]; 

    delete [] pA; 

    return X; 
} 
+1

简介它。 (尽管如果后者更快,我会感到惊讶) – JasonD

+0

编译器可能会计算出地址计算结果,使第一个更好,因为它更简单。 –

+0

考虑返回一个'std :: vector '而不是用'new []'和'delete []'搞乱。 – aschepler

回答

1

虽然我想第二个是速度较慢,由于更多的间接和分配,你真的需要测试和配置文件来回答这种问题。

相关问题