#pragma once #include #include #include "Vector.h" namespace MbD { template class FullColumn : public Vector { public: FullColumn(size_t count) : Vector(count) {} FullColumn(size_t count, const T& value) : Vector(count, value) {} FullColumn(std::initializer_list list) : Vector{ list } {} std::shared_ptr> plusFullColumn(std::shared_ptr> fullCol); std::shared_ptr> minusFullColumn(std::shared_ptr> fullCol); std::shared_ptr> times(double a); std::shared_ptr> negated(); std::string toString() { std::stringstream ss; ss << "FullColumn { "; for (size_t i = 0; i < this->size() - 1; i++) { ss << this->at(i) << ", "; } ss << this->back() << " }"; return ss.str(); } }; using FColDsptr = std::shared_ptr>; template inline std::shared_ptr> FullColumn::plusFullColumn(std::shared_ptr> fullCol) { size_t n = this->size(); auto answer = std::make_shared>(n); for (size_t i = 0; i < n; i++) { answer->at(i) = this->at(i) + fullCol->at(i); } return answer; } template inline std::shared_ptr> FullColumn::minusFullColumn(std::shared_ptr> fullCol) { size_t n = this->size(); auto answer = std::make_shared>(n); for (size_t i = 0; i < n; i++) { answer->at(i) = this->at(i) - fullCol->at(i); } return answer; } template inline std::shared_ptr> FullColumn::times(double a) { size_t n = this->size(); auto answer = std::make_shared(n); for (size_t i = 0; i < n; i++) { answer->at(i) = this->at(i) * a; } return answer; } template inline std::shared_ptr> FullColumn::negated() { return this->times(-1.0); } }