#ifndef MATRIX_H #define MATRIX_H #include #include using namespace std; template class matrix { public: matrix( int rows, int cols ) : array( rows ) { for( auto & thisRow : array ) thisRow.resize( cols ); } matrix( initializer_list> lst ) : array( lst.size( ) ) { int i = 0; for( auto & v : lst ) array[ i++ ] = std::move( v ); } matrix( const vector> & v ) : array{ v } { } matrix( vector> && v ) : array{ std::move( v ) } { } const vector & operator[]( int row ) const { return array[ row ]; } vector & operator[]( int row ) { return array[ row ]; } int numrows( ) const { return array.size( ); } int numcols( ) const { return numrows( ) ? array[ 0 ].size( ) : 0; } private: vector> array; }; #endif