#pragma once #include // This is a linear algebra vector class, not the std::vector class // - the vectors are fixed in their dimension // Class declaration template class vec; // Class definition template class vec { public: vec(); vec( double s ); vec( vec const &v ); vec( std::initializer_list init ); // No move constructors necessary // - no dynamically allocated memory // No destructor required // - all memory allocated at compile time vec operator =( vec const &v ); // No move operator necessary vec operator +() const; vec operator -() const; vec &operator *=( double s ); vec operator * ( double s ) const; vec &operator +=( vec const &v ); vec operator + ( vec const &v ) const; vec &operator -=( vec const &v ); vec operator - ( vec const &v ) const; // We will use vector-vector multiplication for the inner product double operator * ( vec const &v ) const; double &operator []( std::size_t k ); double operator []( std::size_t k ) const; bool operator ==( vec const &v ) const; bool operator !=( vec const &v ) const; double norm( int p = 2 ) const; static double norm( vec const & v, int p = 2 ); template friend vec operator *( double s, vec const &v ); template friend std::ostream &operator<<( std::ostream &out, vec const &v ); private: double entries_[N]; }; #include "vec.tpp"