Решая вопрос, связанный с перегрузкой оператора, я столкнулся с проблемой.Теперь я опишу специфику проблемы.
Код содержит класс с именем Matrix
и определен следующим образом:
class Matrix {
public:
std::vector<std::vector<int>> a;
friend Matrix operator+(const Matrix& x, const Matrix& b);
};
Я должен найти сложение двух матрицперегружая оператор +
.
Изначально я решил использовать функцию transform
для добавления двух матриц и придумал следующий код, который не дает правильный ответ для всех тестовых случаев,
Matrix operator+(const Matrix& x, const Matrix& y) {
Matrix result;
result.a.reserve(x.a.size());
for (size_t i = 0; i < x.a.size(); i++) {
std::transform(x.a.at(i).begin(), x.a.at(i).end(), y.a.at(i).begin(),
std::back_inserter(result.a[i]), std::plus<int>());
}
return result;
}
Итак, я вынужден выполнить ту же задачу с вложенным циклом for, который дает правильный ответ для всех тестовых случаев:
Matrix operator+(const Matrix& x, const Matrix& y) {
Matrix result;
std::vector<int> vec;
result.a.reserve(x.a.size());
for (size_t i = 0; i < x.a.size(); i++) {
vec.reserve(x.a.at(i).size());
for (size_t j = 0; j < x.a.at(i).size(); j++) {
vec.push_back(x.a.at(i).at(j) + y.a.at(i).at(j));
}
result.a.push_back(vec);
vec.clear();
}
return result;
}
Я не вижу, что не так с версией transform
.Кто-нибудь может указать на ошибку в коде?Любая помощь приветствуется.Спасибо.