#ifndef VECTMATH #define VECTMATH #include #include #include #include #include // dot product template std::vector > dot(const std::vector >& a, const std::vector >& b){ assert(a[0].size()==b.size()); T w=0; std::vector > result(a.size(), std::vector(b[0].size())); for (int i=0 ; i std::vector& operator-=(std::vector& u, const std::vector& v){ assert(u.size()==v.size()); for(size_t i=0 ; i std::vector operator+(const std::vector& u, const std::vector& v){ assert(u.size()==v.size()); std::vector w(u.size()); for(size_t i=0 ; i std::vector operator*(const S& s, const std::vector& u){ std::vector result(u.size()); for(size_t i=0 ; i std::vector& operator>>(U (*fun)(U&), std::vector& u){ std::transform(u.begin(), u.end(), u.begin(), fun); return u; } template std::vector& operator>>(S (*fun)(S&), std::vector& u){ for(auto& v : u){ fun >> v; } return u; } template std::vector& operator>>(U (*fun)(), std::vector& u){ for(auto& e : u){ e = fun(); } return u; } template std::vector& operator>>(S (*fun)(), std::vector& u){ for(auto& v : u){ fun >> v; } return u; } template std::ostream& operator<<(std::ostream& os, const std::vector& u){ os << "["; for(size_t i=0 ; i