c++ 理解矩阵加法代码及重载运算符函数中用 * 代替&的用法

ngynwnxp  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(87)

我正在尝试理解以下矩阵加法问题的解决方案:

class Matrix {
    public:
        vector<vector<int>> a;
        Matrix operator+(const Matrix& m) const;
};

Matrix Matrix::operator+(const Matrix& m) const {
    Matrix c;

    for (int i = 0; i < m.a.size(); i++) {
        vector<int> temp;

        for (auto j = m.a[i].begin(), k = a[i].begin(); j != m.a[i].end(); j++, k++) {
            temp.push_back(*j + *k);
        }
        c.a.push_back(temp);
    }
    return c;
}

在代码中,我看到重载的+ operator函数operator+()定义在Matrix类中。我很难理解函数中的以下行:

Matrix Matrix::operator+(const Matrix& m) const {}

为什么在向m传递引用时使用 * 而不是&?我试过使用(*),但它不起作用。有人能解释一下为什么吗?
此外,如果有一个更简洁的解释或更好的解决方案,我将不胜感激,如果有人可以提供它。

ql3eal8s

ql3eal8s1#

jk是自动变量,获取begin()方法的类型。然后*是一个解引用,返回要添加的元素。

vpfxa7rd

vpfxa7rd2#

我想你的意思是
为什么在向m传递引用时使用 * 而不是&?我试过使用(*),但它不起作用。有人能解释一下为什么吗?

Matrix Matrix::operator+(const Matrix* m) const {}

这样做的问题是,你需要“+”地址,而不是矩阵。例如,如果您使用操作符+,* 将工作如下

Matrix a, b;

/* insert some values in a and b */

Matrix c = a + &b (address of b)

这不是最合乎逻辑的做法,如果你想添加2个矩阵,它应该只是a + b而不是a + &b

相关问题