📄 my_mat.cpp
字号:
#include <iostream.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "my_mat.h"My_Matrix::My_Matrix(int mSizeR, int mSizeC){ int i; int j; int k; sizeR = mSizeR; sizeC = mSizeC; ptr = new double*[sizeR]; assert(ptr != 0); for ( k = 0; k < sizeR; k++){ ptr[k] = new double[sizeC]; assert(ptr[k] != 0); // terminate if memory not allocated } for (i = 0; i < sizeR; i++) for (j = 0; j < sizeC; j++) ptr[i][j] = 0.; // initialize array}My_Matrix::~My_Matrix(){ int i; for( i = 0; i < sizeR; i++) delete [] ptr[i]; delete [] ptr;}void My_Matrix::Enlarge(int r, int c){ int i,j,k; double** ptr_buff; ptr_buff = new double*[sizeR]; for ( k = 0; k < sizeR; k++){ ptr_buff[k] = new double[sizeC]; } for (i = 0; i < sizeR; i++) for (j = 0; j < sizeC; j++) ptr_buff[i][j] = ptr[i][j]; for( i = 0; i < sizeR; i++) delete [] ptr[i]; delete [] ptr; ptr = new double*[r]; assert(ptr != 0); for ( k = 0; k < r; k++){ ptr[k] = new double[c]; assert(ptr[k] != 0); // terminate if memory not allocated } int min_r, min_c; if(sizeR > r) min_r = r; else min_r = sizeR; if(sizeC > c) min_c = c; else min_c = sizeC; for (i = 0; i < min_r; i++){ for (j = 0; j < min_c; j++) ptr[i][j] = ptr_buff[i][j]; for (j = min_c; j < c; j++) ptr[i][j] = 0.0; } for (i = min_r; i < r; i++) for (j = 0; j < c; j++) ptr[i][j] = 0.0; for( i = 0; i < sizeR; i++) delete [] ptr_buff[i]; delete [] ptr_buff; sizeR = r; sizeC = c; }void My_Matrix::ReDimension(int r, int c){ int i,j; for(i = 0; i < sizeR; i++) delete [] ptr[i]; delete [] ptr; sizeR = r; sizeC = c; ptr = new double*[sizeR]; for (j = 0; j < sizeR; j++){ ptr[j] = new double[sizeC]; }}// Overloaded subscript operatordouble *My_Matrix::operator[](int subscript){ return ptr[subscript]; }const My_Matrix &My_Matrix::operator=(const My_Matrix &right){ int i,j,k,l,m; if (&right != this) { // check for self-assignment for(i = 0; i < sizeR; i++) delete [] ptr[i]; delete [] ptr; sizeR = right.sizeR; // resize this object sizeC = right.sizeC; ptr = new double*[sizeR]; for (j = 0; j < sizeR; j++){ ptr[j] = new double[sizeC]; // create space for My_Matrix copy assert(ptr[j] != 0); // terminate if memory not allocated } for (k = 0; k < sizeR; k++){ for (l = 0; l < sizeC; l++) ptr[k][l] = right.ptr[k][l]; // copy My_Matrix into object } } return *this; // enables x = y = z;}ostream &operator<<(ostream &output, const My_Matrix &m){ int i; int j; for (i = 0; i < m.sizeR; i++) { for (j = 0; j < m.sizeC; j++) output << m.ptr[i][j] << ' '; output << endl; } return output; // enables cout << x << y;}istream &operator>>(istream &input, My_Matrix &m){ int i; int j; for (i = 0; i < m.sizeR; i++) for (j = 0; j < m.sizeC; j++) input >> m.ptr[i][j] ; return input; // enables cout << x << y;} int My_Matrix::getSizeR() const { return sizeR; }int My_Matrix::getSizeC() const { return sizeC; }int My_Matrix::Nrows() const { return sizeR; }int My_Matrix::Ncols() const { return sizeC; }void mult( My_Matrix &a, My_Matrix &b, My_Matrix &mn){ int i, j, k; double sum = 0; if(a.sizeC!= b.sizeR ) cout << "Wrong Size" << endl; int ra = a.sizeR; int cb = b.sizeC; int ca = a.sizeC; My_Matrix prod(ra,cb); for(i = 0; i < ra; i++) { for(j = 0; j < cb; j++) { sum = 0; for(k = 0; k < ca; k++) sum += a[i][k] * b[k][j]; prod[i][j] = sum; } } mn = prod; }void transpose(My_Matrix &a, My_Matrix &at){ int i, j; int nr = a.sizeR; int nc = a.sizeC; My_Matrix tra(nc,nr); for(i = 0; i < nr; i++) { for(j = 0; j < nc; j++) { tra[j][i] = a[i][j]; } } at = tra; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -