2012-12-31 46 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

雖然我想第二個是速度較慢,由於更多的間接和分配,你真的需要測試和配置文件來回答這種問題。