我正在尝试理解以下矩阵加法问题的解决方案:
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传递引用时使用 * 而不是&?我试过使用(*),但它不起作用。有人能解释一下为什么吗?
此外,如果有一个更简洁的解释或更好的解决方案,我将不胜感激,如果有人可以提供它。
2条答案
按热度按时间ql3eal8s1#
j
和k
是自动变量,获取begin()
方法的类型。然后*
是一个解引用,返回要添加的元素。vpfxa7rd2#
我想你的意思是
为什么在向m传递引用时使用 * 而不是&?我试过使用(*),但它不起作用。有人能解释一下为什么吗?
这样做的问题是,你需要“+”地址,而不是矩阵。例如,如果您使用操作符+,* 将工作如下
这不是最合乎逻辑的做法,如果你想添加2个矩阵,它应该只是a + b而不是a + &b