📄 matrix1.h
字号:
// Matrix1.h: interface for the CMatrix class.
//
//////////////////////////////////////////////////////////////////////
#include "item.h"
#if !defined(AFX_MATRIX1_H__A05DE688_F685_11D6_8D3F_00606706B0B9__INCLUDED_)
#define AFX_MATRIX1_H__A05DE688_F685_11D6_8D3F_00606706B0B9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
template<class DataType>
class CMatrix
{
// Method:
public:
CMatrix(int num,int m,int n)//源矩阵是m x n型
{
pMatrix=NULL;
m_Num=num;
m_nLine=m;
m_nRow=n;
pMatrix=NULL;
pMatrix=new CItem<DataType>[num];
}
virtual ~CMatrix()
{
if(pMatrix!=NULL)
delete [m_Num]pMatrix;
}
void Transposit(CMatrix<DataType> *pM/*源矩阵*/)
//矩阵转置
{
if(pM==NULL)
return;
m_nRow=pM->GetLineNum();//转置矩阵的行数
m_nLine=pM->GetRowNum();//转置矩阵的列数
m_Num=pM->GetNumber();//转置矩阵的非零数
//创建列计数器
int *r=new int[m_nRow];//转置矩阵各行的计数器
//建立列入口指针
CItem<DataType>* *ep=new CItem<DataType>*[m_nRow];
//初始化
for(int i=0;i<m_nRow;i++)
{
r[i]=0;
ep[i]=NULL;
}
//计数器计数
for(i=0;i<m_Num;i++)
r[pM->pMatrix[i].m_LineID-1]++;
//计算列入口地址
int n=0;
for(i=0;i<m_nRow;i++)
{
if(i==0)
ep[0]=&pMatrix[0];
else
{
ep[i]=&pMatrix[n];
}
n+=r[i];
}
//转置
for(i=0;i<m_Num;i++)
{
int lid=pM->pMatrix[i].m_LineID-1;
ep[lid]->m_RowID=pM->pMatrix[i].m_LineID;
ep[lid]->m_LineID=pM->pMatrix[i].m_RowID;
ep[lid]->m_Data=pM->pMatrix[i].m_Data;
ep[lid]++;
}
}
inline int GetNumber() const
{
return m_Num;
}
inline int GetLineNum() const
{
return m_nLine;
}
inline int GetRowNum() const
{
return m_nRow;
}
// Attribute:
public:
CItem<DataType> *pMatrix;// The ptr to the matrix entrance
protected:
int m_nRow;//行数
int m_nLine;//列数
int m_Num;//非零数据个数
};
#endif // !defined(AFX_MATRIX1_H__A05DE688_F685_11D6_8D3F_00606706B0B9__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -