Помогите найти проблему в операторе умножения для вектора
Писал код для возведения вектора во вторую степень. Перегрузил оператор для вектора, но столкнулся с проблемой: компилятор ошибок не видит, но програма не работает.
Примеры ошибок:
_Xlength_error("vector too long");
_THROW(bad_array_new_length{})
throw std::bad_alloc{};
Сам код:
#include <iostream>
#include <map>
#include <vector>
using namespace std;
template<typename Vec>
vector <Vec>& operator*(vector <Vec>& vec1, vector <Vec>& vec2) {
vector <Vec> vec3;
for (int i = 0; i < vec1.size(); i++) {
Vec z = 0;
z = vec1[i] * vec2[i];
vec3.push_back(z);
}
return vec3;
}
template<typename T>
T Sqr(T x) {
return x * x;
}
int main() {
vector<int> v = { 1, 2, 3 };
cout << "vector:";
for (int x : Sqr(v)) {
cout << ' ' << x;
}
cout << endl;
return 0;
}
Ответы (1 шт):
Автор решения: needKVAS
→ Ссылка
Вы возвращаете ссылку на временный объект. Правильно будет так:
template<typename Vec>
vector<Vec> operator*(const vector<Vec>& vec1, const vector<Vec>& vec2) {
//...
}