#include #include using namespace std; void mul( vector> & res, vector> & lhs, vector> & rhs ) { for ( size_t i = 0; i < res.size(); i++ ) for ( size_t j = 0; j < res.at(i).size(); j++ ) { res.at(i).at(j) = 0.0; for ( size_t k = 0; k < rhs.size(); k++ ) @res.at(i).at(j) +=@ @lhs.at(i).at(k) *@ @rhs.at(k).at(j);@ } } #ifdef RUNIT static void zero( vector> & mat ) { for ( size_t i = 0; i < mat.size(); i++ ) for ( size_t j = 0; j < mat.at(i).size(); j++ ) mat.at(i).at(j) = 0.0; } static void fill( vector> & mat ) { for ( size_t i = 0; i < mat.size(); i++ ) for ( size_t j = 0; j < mat.at(i).size(); j++ ) mat.at(i).at(j) = 1.0 * (i + 1) + 0.1 * (j+1); } static void print( vector> & mat ) { for ( size_t i = 0; i < mat.size(); i++ ) { for ( size_t j = 0; j < mat.at(i).size(); j++ ) cout << mat.at(i).at(j) << " "; cout << endl; } } #define EXPSZ_M 2 #define EXPSZ_N 3 #define EXPSZ_P 4 int main() { vector> res( EXPSZ_M, vector( EXPSZ_N ) ); zero( res ); vector> lhs( EXPSZ_M, vector( EXPSZ_P ) ); fill( lhs ); vector> rhs( EXPSZ_P, vector( EXPSZ_N ) ); fill( rhs ); mul( res, lhs, rhs ); print(lhs); printf("*\n"); print(rhs); printf("=\n"); print(res); } #endif