在C ++中添加矩阵

时间:2015-04-04 17:28:52

标签: c++ matrix

作为我写作的一个程序的一部分,我编写了一个代码段来将两个矩阵加在一起。它们都保证是正方形的,并且尺寸相同,但矩阵尺寸是可变的,我并不完全确切地确定它们是什么(尽管我应该能够立即确定它在执行此操作之前,因为我有矩阵 - 对吗?)我的代码如下:

double MatrixAdder( double A, double B, int MatrixSize )
{   
    vector <double> C[ MatrixSize ] [ MatrixSize ] ;
    int i, j ;

    for ( i = 0 ; i < MatrixSize ; i++ )
    {
            for ( j = 0 ; j < MatrixSize ; j++ )
        {
            C[ i ][ j ] = A[ i ][ j ] + B[ i ][ j ] ;
        } ;
    } ;
} ;

我不断提出以下错误:

无效类型&#39; double [int]&#39;对于数组下标

它在C [i] [j] = A [i] [j] + B [i] [j]的A [i] [j]和B [i] [j]部分上标记。

我已经从其他答案中得到了印象,我可能需要定义一个新的双(int)函数来克服这一点,但我真的不知道如何克服这个。

P.S。对不起,如果这不是很清楚 - 这是我的第一篇文章,我会按照要求提供澄清。

4 个答案:

答案 0 :(得分:0)

问题来自您的输入参数A&amp; B double。{/ 1>

如果你想使用矢量,你应该使用:vector<vector<double>>

vector<vector<double>> MatrixAdder(const vector<vector<double>>& A, const vector<vector<double>>& B)
{   
    vector<vector<double>> C (A.size());
    int i, j ;

    for ( i = 0 ; i < A.size() ; i++ )
    {
        C[i].resize(A[i].size());
        for ( j = 0 ; j < A[i].size() ; j++ )
        {
            C[ i ][ j ] = A[ i ][ j ] + B[ i ][ j ] ;
        }
    }

    return C;
}

请注意,使用此解决方案,您无需传递数组大小。

答案 1 :(得分:0)

我假设你已经在其他地方定义了矩阵A和B,但是你告诉函数A和B不是矩阵或数组,只是double类型的变量。尝试将您的功能更改为:

typedef std::vector<std::vector<double>> Matrix;
Matrix MatrixAdder(Matrix A, Matrix B)

杰罗姆在说你实际上并不需要在这个实现中提供矩阵大小时是正确的。如果你想要处理数组,那么你需要(不推荐这个)。另外请注意,由于您不打算更改矩阵A或B,我建议您通过const引用传递它们。那就是:

Matrix MatrixAdder(const Matrix &A, const Matrix &B)

这只是一个很好的做法,如果你最终将它用于大型矩阵,复制矩阵A和B将是一个缓慢的过程(而不是简单地引用它们)。

答案 2 :(得分:0)

如果你真的需要实现矩阵运算,你可以使用类似这样的东西

typedef std::vector<std::vector<double>> DMatrix;

void MatrixAdder( DMatrix const& A, DMatrix const& B, DMatrix& res )
{   
    res.resize(A.size());
    for ( int i = 0; i < A.size(); i++ )
    {
        res[i].resize(A[i].size);
        for ( int j = 0 ; j < A(i).size ; j++ )
            res[i][j] = A[i][j] + B[i][j];
    } 
}

但是使用现有的库更加容易和恰当。

答案 3 :(得分:0)

我相信你这里有几个错误。你说你的功能MatrixAdder收到一个双A和一个双B. 但是一个简单的双重并不是一个双打数组或双维数组的双精度数...

为了使其正常工作,你应该做一些事情,例如将双** A和双** B传递给它,之前已经动态分配了它。

另外,你不需要加上那么多分号。在for(){...}之后和函数定义之后,没有必要使用分号,尽管在这种情况下它不会给你错误。