#pragma once #include "Array.h" namespace MbD { template class FullVector : public Array { public: FullVector() {} FullVector(size_t count) : Array(count) {} FullVector(size_t count, const T& value) : Array(count, value) {} FullVector(std::initializer_list list) : Array{ list } {} double dot(std::shared_ptr> vec); void atiplusNumber(size_t i, T value); double sumOfSquares() override; size_t numberOfElements() override; void zeroSelf() override; void atitimes(size_t i, double factor); }; template inline double FullVector::dot(std::shared_ptr> vec) { size_t n = this->size(); double answer = 0.0; for (size_t i = 0; i < n; i++) { answer += this->at(i) * vec->at(i); } return answer; } template inline void FullVector::atiplusNumber(size_t i, T value) { this->at(i) += value; } template<> inline double FullVector::sumOfSquares() { double sum = 0.0; for (size_t i = 0; i < this->size(); i++) { double element = this->at(i); sum += element * element; } return sum; } template inline double FullVector::sumOfSquares() { assert(false); return 0.0; } template inline size_t FullVector::numberOfElements() { return this->size(); } template<> inline void FullVector::zeroSelf() { for (size_t i = 0; i < this->size(); i++) { this->at(i) = 0.0;; } } template inline void FullVector::zeroSelf() { assert(false); } template inline void FullVector::atitimes(size_t i, double factor) { this->at(i) *= factor; } }