From 73633535288711de4850b9d9eec6326eb5de06c0 Mon Sep 17 00:00:00 2001 From: Siddarth-Suresh <65844402+Siddarth-Suresh@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:02:23 -0400 Subject: Template files for vectors to override arithmetic operations --- src/vec.cc | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/vec.cc (limited to 'src/vec.cc') diff --git a/src/vec.cc b/src/vec.cc new file mode 100644 index 0000000..e3e0a6c --- /dev/null +++ b/src/vec.cc @@ -0,0 +1,113 @@ +#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; +} -- cgit v1.2.3