📜  使用运算符重载的矩阵运算(1)

📅  最后修改于: 2023-12-03 14:49:57.954000             🧑  作者: Mango

使用运算符重载的矩阵运算

在C++中,我们可以通过运算符重载来定义矩阵运算,使得代码更加简洁易懂。下面我们将介绍如何使用运算符重载进行矩阵运算。

定义矩阵类

首先,我们需要定义一个矩阵类。在这个类中,我们需要定义矩阵的行数、列数以及矩阵元素。代码如下:

class Matrix {
public:
    int row, col;
    vector<vector<int>> data;

    Matrix(int row, int col) : row(row), col(col) {
        data.resize(row, vector<int>(col));
    }

    Matrix operator+(const Matrix& A) const {
        Matrix res(row, col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                res.data[i][j] = data[i][j] + A.data[i][j];
            }
        }
        return res;
    }

    Matrix operator-(const Matrix& A) const {
        Matrix res(row, col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                res.data[i][j] = data[i][j] - A.data[i][j];
            }
        }
        return res;
    }

    Matrix operator*(const Matrix& A) const {
        Matrix res(row, A.col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < A.col; j++) {
                for (int k = 0; k < col; k++) {
                    res.data[i][j] += data[i][k] * A.data[k][j];
                }
            }
        }
        return res;
    }
};

在这个类中,我们重载了三个运算符:加号、减号和乘号。加号和减号的运算比较简单,直接对对应位置的矩阵元素进行加减。乘号的运算需要按矩阵乘法的规则进行计算。

使用矩阵类进行运算

有了这个矩阵类之后,我们就可以很方便地进行矩阵运算了。下面是一个示例代码:

Matrix A(2, 3);
A.data = {{1, 2, 3}, {4, 5, 6}};
Matrix B(3, 2);
B.data = {{7, 8}, {9, 10}, {11, 12}};
Matrix C = A * B;

上面这段代码定义了两个矩阵A和B,然后对它们进行乘法运算,结果存到了矩阵C中。

总结

通过定义矩阵类并使用运算符重载,我们可以很方便地进行矩阵运算。这大大简化了代码的书写,使得代码更加易懂。