矩阵模板类.docx
- 文档编号:9115072
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:49.95KB
矩阵模板类.docx
《矩阵模板类.docx》由会员分享,可在线阅读,更多相关《矩阵模板类.docx(18页珍藏版)》请在冰豆网上搜索。
矩阵模板类
矩阵模板类
使用C++中的模板,完成了一个矩阵模板类的实例。
源代码如下:
矩阵类:
Matrix.h
#ifndefMATRIX_H
#defineMATRIX_H
#include
#include
usingnamespacestd;
//定义矩阵类
template
classCMatrix
{
public:
T**m_data;
intm_curRow;
intm_curCol;
public:
//构造函数
CMatrix(){}
CMatrix(char*fileName,introw,intcol):
m_row(row),m_col(col)
{
//申请空间
this->m_originalData=newT[row*col];
this->m_temp=newT[row*col];
//动态申请二维数组
this->m_data=newT*[row];
for(intm=0;m { m_data[m]=newT[col]; } this->m_curRow=row; this->m_curCol=col; //获取文件数据 fstreaminfile(fileName); if(! infile) { //原始数据赋零值 for(inti=0;i { for(intj=0;j { this->m_originData[i*col+j]=0; this->m_temp[i*col+j]=0; this->m_data[i][j]=0; } } } else { charch_num[20]; inti=0,j=0,count=0; while(! infile.eof()) { count++; infile.getline(ch_num,sizeof(ch_num)); Tdata=(T)(atof(ch_num)); if(count%col==0) { i=count/col-1; j=0; } j++; this->data[i][j]=data; this->m_originalData[count]=data; } } infile.close(); } CMatrix(T**array,introw,intcol): m_row(row),m_col(col) { //循环变量 inti=0; intj=0; //动态申请二维数组 this->m_data=newT*[row]; for(intm=0;m { m_data[m]=newT[col]; } //申请空间 this->m_originalData=newT[row*col]; this->m_temp=newT[row*col]; //赋初值 for(i=0;i { for(intj=0;j { this->m_originalData[i*col+j]=array[i][j]; this->m_temp[i*col+j]=0; this->m_data[i][j]=array[i][j]; } } this->m_curRow=row; this->m_curCol=col; } CMatrix(T*array,introw,intcol): m_row(row),m_col(col) { inti=0; intj=0; //动态申请二维数组 this->m_data=newT*[row]; for(intm=0;m { m_data[m]=newT[col]; } //申请空间 this->m_originalData=newT[row*col]; this->m_temp=newT[row*col]; //赋初值 for(i=0;i { for(j=0;j { this->m_originalData[i*col+j]=array[i*col+j]; this->m_temp[i*col+j]=0; this->m_data[i][j]=array[i*col+j]; } } this->m_curRow=row; this->m_curCol=col; } CMatrix(constCMatrix { //循环变量 inti=0; intj=0; introw=src.m_row; intcol=src.m_col; //动态申请二维数组 this->m_data=newT*[row]; for(intm=0;m { m_data[m]=newT[col]; } //申请空间 this->m_originalData=newT[row*col]; this->m_temp=newT[row*col]; //赋初值 for(i=0;i { for(intj=0;j { this->m_originalData[i*col+j]=src.m_data[i][j]; this->m_temp[i*col+j]=0; this->m_data[i][j]=src.m_data[i][j]; } } this->m_row=row; this->m_col=col; this->m_curRow=row; this->m_curCol=col; } CMatrix(introw,intcol,Telement=0) { //循环变量 inti=0; intj=0; //动态申请二维数组 this->m_data=newT*[row]; for(intm=0;m { m_data[m]=newT[col]; } //申请空间 this->m_originalData=newT[row*col]; this->m_temp=newT[row*col]; //赋初值 for(i=0;i { for(intj=0;j { this->m_originalData[i*col+j]=element; this->m_temp[i*col+j]=0; this->m_data[i][j]=element; } } this->m_row=row; this->m_col=col; this->m_curRow=row; this->m_curCol=col; } //CMatrix(int,int,int); //CMatrix(CMatrix //析构函数 ~CMatrix() { /* delete[]this->m_originalData; delete[]this->m_temp; for(inti=0;i { delete[]this->m_data[i]; } deletethis->m_data; */ } //获取矩阵行列数 intGetMatrixRow()const { returnthis->m_row; } intGetMatrixCol()const { returnthis->m_col; } //矩阵转置 voidTransposeMatrix() { for(inti=0;i { for(intj=0;j { //this->m_resultData[j][i]=this->m_originData[i][j]; //this->data[j][i]= } } } //输出矩阵 voidPrintMatrix() { for(inti=0;i { for(intj=0;j { cout< } cout< } } //矩阵行列式值 boolGetMatrixDet(double&result) { //判断是否是方阵 if(IsOrderNMatrix()) { //计算行列式值返回true returntrue; } else { returnfalse; } } //获取某一(row,col)值 TGetElement(introw,intcol)const { if(row returnthis->m_data[row][col]; else return0; } //设置某一(row,col)值 boolSetElement(introw,intcol,Tvalue) { if(row { this->m_data[row][col]=value; returntrue; } else returnfalse; } //交换矩阵两行 boolSwapRow(introw1,introw2); //交换矩阵两列 boolSwapCol(intcol1,intcol2); //全选主元高斯-约旦法求逆 boolInverse(); //运算符重载 //CMatrix //CMatrix //CMatrix CMatrix { for(inti=0;i { for(intj=0;j { this->m_data[i][j]=m.GetElement(i,j); } } return*this; } //friendCMatrix //friendCMatrix //friendCMatrix frienddoubleGet() { return(double)0.0; } private: intm_row; intm_col; //vector //vector T*m_originalData; T*m_temp; private: boolIsOrderNNatrix() { if(this->m_curCol==this->m_curRow) returntrue; else returnfalse; } boolIsSingularMatrix() { double*temp; if(this->GetMatrixDet(&temp)) { deletetemp; returntrue; } else { deletetemp; returnfalse; } } boolIsSameTypeMatrix(CMatrix { if(m.m_curRow==this->m_curRow&&m.m_curCol==this->m_curCol) returntrue; else returnfalse; } }; #endif 模板测试: main.h #include #include usingnamespacestd; #include"Matrix.h" #include"Matrix.cpp" voidmain() { vector vector temp.resize(5); data.resize(5,temp); for(inti=0;i<5;i++) { for(intj=0;j<5;j++) { data[i][j]=1; } } for(i=0;i<5;i++) { for(intj=0;j<5;j++) { cout< } cout< } cout<<"hello,world"< cout<<"矩阵一***************************************"< inta[6]={1,2,3,4,5,6}; //int**p=&(a[0]); //(*p)[0]={1,2,3}; //(*p)[1]={4,5,6}; //for(intmm=0;mm<6;mm++) //{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 模板