对二维阵列的操作

时间:2010-09-08 01:54:58

标签: c++

如何分别计算每行和每列的总和或乘积 在二维数组中。

2 个答案:

答案 0 :(得分:1)

您需要具有相同数量元素的数组(或者您可以使用向量)来放置结果。

C ++ ish code:

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循环中的行和列位置。

答案 1 :(得分:0)

一种可能性是使用std::accumulate,这是针对这种情况设计的。

我毫不犹豫地提到它,但C ++标准库提供了另一种可能性,更具体地设计用于此类用途。 std::valarray重载了许多标准的数学运算符,使这类事情变得微不足道。问题在于它的文档记录很少,很少使用,即使它可以完成这项工作,但几乎任何使用valarray至少会使代码模糊不清。