矩阵模板类.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&src)
{
//循环变量
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(CMatrixmatrix);
//析构函数
~CMatrix()
{
/*
delete[]this->m_originalData;
delete[]this->m_temp;
for(inti=0;im_col;i++)
{
delete[]this->m_data[i];
}
deletethis->m_data;
*/
}
//获取矩阵行列数
intGetMatrixRow()const
{
returnthis->m_row;
}
intGetMatrixCol()const
{
returnthis->m_col;
}
//矩阵转置
voidTransposeMatrix()
{
for(inti=0;im_row;i++)
{
for(intj=0;jm_col;j++)
{
//this->m_resultData[j][i]=this->m_originData[i][j];
//this->data[j][i]=
}
}
}
//输出矩阵
voidPrintMatrix()
{
for(inti=0;im_row;i++)
{
for(intj=0;jm_col;j++)
{
cout<}
cout<}
}
//矩阵行列式值
boolGetMatrixDet(double&result)
{
//判断是否是方阵
if(IsOrderNMatrix())
{
//计算行列式值返回true
returntrue;
}
else
{
returnfalse;
}
}
//获取某一(row,col)值
TGetElement(introw,intcol)const
{
if(rowGetMatrixRow()&&colGetMatrixCol())
returnthis->m_data[row][col];
else
return0;
}
//设置某一(row,col)值
boolSetElement(introw,intcol,Tvalue)
{
if(rowGetMatrixRow()&&colGetMatrixCol())
{
this->m_data[row][col]=value;
returntrue;
}
else
returnfalse;
}
//交换矩阵两行
boolSwapRow(introw1,introw2);
//交换矩阵两列
boolSwapCol(intcol1,intcol2);
//全选主元高斯-约旦法求逆
boolInverse();
//运算符重载
//CMatrixoperator+(constCMatrix&m);
//CMatrixoperator-(constCMatrix&m);
//CMatrixoperator*(constCMatrix&m);
CMatrix&operator=(constCMatrix&m)
{
for(inti=0;im_row;i++)
{
for(intj=0;jm_col;j++)
{
this->m_data[i][j]=m.GetElement(i,j);
}
}
return*this;
}
//friendCMatrixoperator+(constCMatrix&l,constCMatrix&r);
//friendCMatrixoperator-(constCMatrix&l,constCMatrix&r);
//friendCMatrixoperator*(constCMatrix&l,constCMatrix&r);
frienddoubleGet()
{
return(double)0.0;
}
private:
intm_row;
intm_col;
//vector>m_originData;
//vector>m_resultData;
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&m)
{
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>data;
vectortemp;
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++)
//{
//cout<//}
//cout<//charch[]="aaa.txt";
cout<<*a<CMatrixmatrix(a,2,3);
matrix.PrintMatrix();
cout<<"友元函数Get()结果:
"<cout<<"矩阵二***************************************"<intaa[2][3]={{2,2,2},{4,5,6}};
int*arraa[2]={aa[0],aa[1]};
int**pp=arraa;
CMatrixmatrix1(pp,2,3);
CMatrixmatrix2(pp,2,3);
matrix1.PrintMatrix();
cout<<"加法矩阵结果***************************************"<matrix2=matrix+matrix1;
matrix2.PrintMatrix();
cout<<"减法矩阵结果***************************************"<matrix2=matrix2-matrix2;
matrix2.PrintMatrix();
cout<<"使用矩阵初始化矩阵*********************************"<CMatrixmatrix3(matrix);
matrix3.PrintMatrix();
matrix.PrintMatrix();
matrix1.PrintMatrix();
matrix2.PrintMatrix();
matrix3.PrintMatrix();
cout<<"获取元素"<cout<cout<<"矩阵乘法测试*********************************"<CMatrixmatrix6(2,3,(int)1);
CMatrixmatrix7(3,2,(int)1);
CMatrixmatrix8(matrix6*matrix7);
//matrix6.PrintMatrix();
//matrix7.PrintMatrix();
//matrix8.PrintMatrix();
CMatrixmatrix9(2,2,9);
matrix9.PrintMatrix();
matrix9=matrix6*matrix7;
matrix9.PrintMatrix();
}
运行结果:
|
|
|
|
|
|
|
|
|
|