65.9K
CodeProject 正在变化。 阅读更多。
Home

动态大小矩阵的 CMatrix 类

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.73/5 (5投票s)

2006年4月30日

CPOL
viewsIcon

31561

downloadIcon

265

用于操作动态矩阵的类。

引言

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)

请随意使用这段代码。

© . All rights reserved.