#pragma once #include #include #include namespace MbD { template class Array : public std::vector { public: Array() {} Array(size_t count) : std::vector(count) {} Array(size_t count, const T& value) : std::vector(count, value) {} Array(std::initializer_list list) : std::vector{ list } {} void copyFrom(std::shared_ptr> x); void zeroSelf(); double sumOfSquares(); double sumOfSquaresOfVector(); }; template inline void Array::copyFrom(std::shared_ptr> x) { for (size_t i = 0; i < x->size(); i++) { this->at(i) = x->at(i); } } template <> inline void Array::zeroSelf() { for (size_t i = 0; i < this->size(); i++) { this->at(i) = 0.0;; } } template inline double Array::sumOfSquares() { if (std::is_arithmetic) { return this->sumOfSquaresOfVector(); } else { double sum = 0.0; for (size_t i = 0; i < this->size(); i++) { sum += this->at(i)->sumOfSquares(); } return sum; } } template inline double Array::sumOfSquaresOfVector() { double sum = 0.0; for (size_t i = 0; i < this->size(); i++) { double element = this->at(i); sum += element * element; } return sum; } using ListD = std::initializer_list; using ListListD = std::initializer_list>; using ListListPairD = std::initializer_list>>; }