动态大小矩阵的 CMatrix 类






2.73/5 (5投票s)
用于操作动态矩阵的类。
引言
CMatrix
是一个用于操作具有动态大小的矩阵集合的类。它可以用于不同的矩阵,用于图形显示、求解方程以及向量操作。
这是 typedef
typedef std::vector<double> MXCol; typedef std::vector<double>::iterator MXColPos; typedef std::vector<MXCol> MXRow; typedef std::vector<MXCol>::iterator MXRowPos; typedef enum {MX_EMPTY, MX_ROWEMPTY, MX_COLEMPTY, MX_UNITY, MX_ROWVECTOR, MX_COLVECTOR, MX_SQUARE, MX_RECT} MXType; typedef struct _MX_SIZESTRUCT { int ms_row; int ms_col; }MXSize;
很明显,我使用了 std::vector<>
,这也是创建动态大小矩阵的原因。
以下是函数和成员
//size functions void mxSetSize(int row, int col); void mxSetSize(MXSize& size); MXSize mxGetSize(); MXType mxGetType(); //matrix operations bool mxInsertRow(int nAfterRow, int nArraySize, const double *array); bool mxInsertCol(int nAfterCol, int nArraySize, const double *array); bool mxInsertRow(int nAfterRow, CMatrix& m); bool mxInsertCol(int nAfterCol, CMatrix& m); bool mxInsertMatrix(int nAfterRow, int nAfterCol, CMatrix& m); bool mxEraseRow(int nRowCount); bool mxEraseCol(int nColCount); void mxFill(double value); //testing bool mxIsOK(); //retrieve matrix CMatrix mxGetSubMatrix(int nRowCount, int nColCount, MXSize& size); //calculation double mxDet(); CMatrix mxInverse(); //operator functions CMatrix& operator=(CMatrix& m); CMatrix& operator=(double a); MXCol& operator[](int n); //protected functions void mxSetType(); void mxZeroCol(MXCol& col); void mxExtendRowZero(int pRowPos, int Num); void mxExtendColZero(int pColPos, int Num); void mxRefreshSize(); //friend functions friend ostream& operator<<(ostream& out, CMatrix& m); friend CMatrix operator +(CMatrix& m1, CMatrix& m2); friend CMatrix operator -(CMatrix& m1, CMatrix& m2); friend CMatrix operator *(CMatrix& m1, CMatrix& m2); friend CMatrix operator *(CMatrix& m, double f); friend CMatrix operator /(CMatrix& m, double f); friend bool operator ==(CMatrix& m1, CMatrix& m2); friend bool operator !=(CMatrix& m1, CMatrix& m2); friend bool mxIsSameSize(CMatrix& m1, CMatrix& m2); friend bool mxIsProducable(CMatrix& m1, CMatrix& m2); friend void swap(CMatrix& m1, CMatrix& m2); friend CMatrix mxTrans(CMatrix& m); //member MXSize mx_size; MXType mx_type; MXRow mx_row;
声明矩阵类
MATRIX m(2,3);
这意味着一个 2x3 矩阵
[][][]
[][][]
被创建。
请注意,如果矩阵最初没有指定大小,我们执行
MATRIX m; MATRIX m(2,0) MATRIX m(0,2)
请随意使用这段代码。