乘以可变大小的矩阵

时间:2017-11-09 17:09:44

标签: c++ class templates overloading operation

我已经构建了一个类,它声明了一个包含不同类型元素的m,n矩阵。

template<typename T>
class Matrix {
public:
    int m, n;
    T *elements;

我现在如何重载运算符以乘以两个矩阵? 我对处理可能具有各种尺寸的矩阵感到困惑。

我知道我需要这条线,但我不知道该怎么办:

Matrix<T> operator*(Matrix<T> const &b)

1 个答案:

答案 0 :(得分:0)

以下代码未经测试,但它应该让您了解如何进行矩阵乘法。

我建议将operator*定义为自由函数而不是成员函数。

template<typename T>
class Matrix
{
public:
    Matrix(int r, int c)
        : rows(r)
        , cols(c)
        , elements.resize(rows * cols)
    { }

    int rows = 0, cols = 0;
    T& operator()(int i, int j) { return elements[i * ncols + j]; }
    std::vector<T> elements;
};

template<typename T>
Matrix<T> operator*(Matrix<T> const& a, Matrix<T> const& b)
{
    assert(a.cols == b.rows);
    Matrix<T> c(a.rows, b.cols);
    for (int output_row = 0; output_row < a.rows; ++output_row)
    {
        for (int output_col = 0; output_col < b.cols; ++output_col)
        {
            double sum = 0.0;
            for (int i = 0; i < a.cols; ++i)
                sum += a(output_row, i) * b(i, output_col);
            c(output_row, output_col) = sum;
        }
    }
    return c;
}