#include "vec.h" template Vec Vec::operator+(const Vec& other) const { if (data.size() != other.data.size()) throw std::invalid_argument("Size mismatch"); Vec result; for (size_t i = 0; i < data.size(); ++i) result.data.push_back(data[i] + other.data[i]); return result; } template Vec Vec::operator-(const Vec& other) const { if (data.size() != other.data.size()) throw std::invalid_argument("Size mismatch"); Vec result; for (size_t i = 0; i < data.size(); ++i) result.data.push_back(data[i] - other.data[i]); return result; } template Vec Vec::operator*(const Vec& other) const { if (data.size() != other.data.size()) throw std::invalid_argument("Size mismatch"); Vec result; for (size_t i = 0; i < data.size(); ++i) result.data.push_back(data[i] * other.data[i]); return result; } template Vec Vec::operator/(const Vec& other) const { if (data.size() != other.data.size()) throw std::invalid_argument("Size mismatch"); Vec result; for (size_t i = 0; i < data.size(); ++i) result.data.push_back(other.data[i] == 0 ? 0 : data[i] / other.data[i]); return result; } template Vec Vec::operator%(const Vec& other) const { if (data.size() != other.data.size()) throw std::invalid_argument("Size mismatch"); Vec result; for (size_t i = 0; i < data.size(); ++i) result.data.push_back(other.data[i] == 0 ? 0 : data[i] % other.data[i]); return result; } // Scalar versions template Vec Vec::operator+(T scalar) const { Vec result; for (const auto& val : data) result.data.push_back(val + scalar); return result; } template Vec Vec::operator-(T scalar) const { Vec result; for (const auto& val : data) result.data.push_back(val - scalar); return result; } template Vec Vec::operator*(T scalar) const { Vec result; for (const auto& val : data) result.data.push_back(val * scalar); return result; } template Vec Vec::operator/(T scalar) const { Vec result; for (const auto& val : data) result.data.push_back(scalar == 0 ? 0 : val / scalar); return result; } template Vec Vec::operator%(T scalar) const { Vec result; for (const auto& val : data) result.data.push_back(scalar == 0 ? 0 : val % scalar); return result; } // Scalar - Vector versions template Vec operator-(T scalar, const Vec& vec) { Vec result; for (size_t i = 0; i < vec.size(); ++i) result = result + (scalar - vec.data[i]); return result; } template Vec operator/(T scalar, const Vec& vec) { Vec result; for (auto val : vec.data) result = result + (val == 0 ? 0 : scalar / val); return result; } template Vec operator%(T scalar, const Vec& vec) { Vec result; for (auto val : vec.data) result = result + (val == 0 ? 0 : scalar % val); return result; } template void Vec::print() const { for (auto val : data) std::cout << val << " "; std::cout << std::endl; }