矩阵模板类.docx

上传人:b****8 文档编号:9115072 上传时间:2023-02-03 格式:DOCX 页数:18 大小:49.95KB
下载 相关 举报
矩阵模板类.docx_第1页
第1页 / 共18页
矩阵模板类.docx_第2页
第2页 / 共18页
矩阵模板类.docx_第3页
第3页 / 共18页
矩阵模板类.docx_第4页
第4页 / 共18页
矩阵模板类.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

矩阵模板类.docx

《矩阵模板类.docx》由会员分享,可在线阅读,更多相关《矩阵模板类.docx(18页珍藏版)》请在冰豆网上搜索。

矩阵模板类.docx

矩阵模板类

矩阵模板类

使用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();

}

运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1