我已经构建了一个类,它声明了一个包含不同类型元素的m,n矩阵。
template<typename T>
class Matrix {
public:
int m, n;
T *elements;
我现在如何重载运算符以乘以两个矩阵? 我对处理可能具有各种尺寸的矩阵感到困惑。
我知道我需要这条线,但我不知道该怎么办:
Matrix<T> operator*(Matrix<T> const &b)
答案 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;
}