2010-09-08 96 views

回答

1

你需要陣列具有相同數量的元素(或者你可以使用一個向量)以將結果

C++代碼的ISH。

template<class T> 
vector<T> SumRows(T * array, unsigned int rows, unsigned int cols) 
{ 
    vector<T> sums; 
    for (unsigned int i = 0; i < rows; i++) 
    { 
     T sum = 0; 
     for (unsigned int j = 0; j < cols; j++) 
     { 
      sum += array[i][j]; 
     } 
     sums.push_back(sum); 
    } 
    return sums; 
} 

我模板它有趣,但它依賴於具有=和+ =運算符的類型,並且可以分配一個int常量。 用指向第一個元素的指針(或者只是使用數組)來調用該函數,適當的類型和計數。例如:

int myArray[3][3]; 
vector<int> sums = SumRows<int>(myArray, 3, 3); 

列總和的工作原理類似,只是將for循環中的行和列位置顛倒過來。

0

一種可能性會使用std::accumulate,這是專爲這種情況而設計的。

我不願意提及它,但C++標準庫提供了另一種可能性,這種可能性甚至更具體地被設計用於這種用途。 std::valarray重載了許多標準的數學運算符,使這種事情幾乎微不足道。問題在於它的文檔記錄很差,很少使用,即使它可以完成這項工作,但幾乎可以使用valarray來混淆代碼。