大佬教程收集整理的这篇文章主要介绍了c – 带运算符重载的矩阵乘法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的重载运算符
template <typename T> const matrix<T> matrix<T>::operator * (const matrix& right) const { matrix<T> c = right; int sum_elems; for( int i = 0; i < this->rows - 1; ++i) { for(int j = 0; j < right.cols - 1; ++j) { sum_elems = 0; for( int k = 0; k < right.rows - 1; ++k) { sum_elems += this->the_matrix[i][k] * right.the_matrix[k][j]; } c.the_matrix[i][j] = sum_elems; } } return c; }
std::cout << my_matrix; matrix<int> copy_matrix; copy_matrix = my_matrix * my_matrix; std::cout << copy_matrix;
我的输出:
The Matrix: 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 The Matrix: -1 33 139587680 18 38 75 139587680 18 38 75 157 1 139587712 38 1470 4365 10411 1 139587744 75 4365 19058932 64514866 0 139587776 157 10411 64514866 1136204102 1 139596144 1 1 0 1 0
正如你所看到的那样,我似乎走出了我的一个阵列的界限.我似乎无法找到它.我提前感谢您的帮助.
编辑:按要求我完整实现我的矩阵类
矩阵定义:
template <typename T> class matrix { public: //Default Constructor matrix(); //Overloaded Constructor matrix(std::ifstream&,const char*); //Copy Constructor matrix(const matrix&); //Destructor ~matrix(); //overloaded operators T* operator [] (T); const matrix operator * (const matrix&) const; matrix& operator = (const matrix&); friend std::ostream& operator << <T> (std::ostream&,const matrix<T>&); private: T** the_matrix; unsigned rows,cols;
矩阵实施:
/* Template version of matrix class */ /*---------------------------------------------------------------------------*/ // Default contructor template <typename T> matrix<T>::matrix() { } // Overloaded contructor template <typename T> matrix<T>::matrix( std::ifstream& in,const char* filE) { // declare the variables to be used T vertices,edges,u,v; std::string line; // open file for reading in.open(filE); // get number of vertices in >> vertices; // throw away second line std::getline(in,linE); std::getline(in,linE); // get number of edges and dump them in two arrays in >> edges; T edge1 [edges]; T edge2 [edges]; int j = 0,k = 0; for(int a = 0; a < edges; ++a) { in >> u >> v; edge1[j] = u; edge2[k] = v; ++j; ++k; } in.close(); // Create multi-dim-dynamic array rows = vertices; cols = vertices; the_matrix = new T*[rows]; for( int b = 0; b < rows; ++b) { the_matrix[b] = new T [rows]; } // Initialize array values to zero for ( int c = 0; c < rows; ++C) { for( int d = 0; d < cols; ++d) { the_matrix[c][d] = 0; } } // push the edges to the matrix for( int e = 0; e < edges; ++E) { the_matrix[edge1[e] - 1][edge2[e] - 1] = 1; } for ( int f = 0; f < edges; ++f) { the_matrix[edge2[f] - 1][edge1[f]-1] = 1; } } // Copy Constructor template <typename T> matrix<T>::matrix(const matrix& left) { the_matrix = left.the_matrix; rows = left.rows; cols = left.cols; spath = left.spath; } // Destructor template <typename T> matrix<T>::~matrix() { // deletes the data in reverse order of alLOCATIOn for( int a = cols; a > 0; --a) { delete[ ] the_matrix[a]; } delete[ ] the_matrix; } // Overloaded * Operator template <typename T> const matrix<T> matrix<T>::operator * (const matrix& right) const { matrix<T> c = right; T sum_elems; for( int i = 0; i < this->rows - 1; ++i) { for(int j = 0; j < right.cols - 1; ++j) { sum_elems = 0; for( int k = 0; k < right.rows - 1; ++k) { sum_elems += this->the_matrix[i][k] * right.the_matrix[k][j]; } c.the_matrix[i][j] = sum_elems; } } return c; } // Overloaded assignment Operator template <typename T> matrix<T>& matrix<T>::operator = (const matrix& right) { this->the_matrix= right.the_matrix; this->rows = right.rows; this->cols = right.cols; this->spath = right.spath; return *this; } // Overloaded << operator template <typename T> std::ostream& operator << (std::ostream& output,const matrix<T>& left) { // Test screen output to see if correct std::cout << std::setw(14) << "The Matrix:" << '\n'; for( int a = 0; a < left.rows; ++a) { for( int b = 0; b < left.cols; ++b) { std::cout << ' ' << left.the_matrix[a][b] << ' '; } std::cout << '\n'; } return output; }
以上是大佬教程为你收集整理的c – 带运算符重载的矩阵乘法全部内容,希望文章能够帮你解决c – 带运算符重载的矩阵乘法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。