マトリックステンプレートクラス
2167 ワード
#include
#include
#include
using namespace std;
template
class CMatrix
{
public:
CMatrix();
CMatrix(int row, int col);
CMatrix(int row, int col, T *data);
CMatrix(CMatrix& m2);
void PrintMat();
~CMatrix();
T **mp_data;
int m_row;
int m_col;
};
template
CMatrix::CMatrix()
{
m_row = m_col = 0;
mp_data = NULL;
}
template
CMatrix::~CMatrix()
{
for (int i = 0; i < m_row; ++i)
{
delete [] mp_data[i];
mp_data[i] = NULL;
}
delete []mp_data;
mp_data = NULL;
}
template
CMatrix::CMatrix(int row, int col)
{
m_row = row;
m_col = col;
mp_data = new T*[m_row];
for (int i = 0; i < m_row; ++i)
{
mp_data[i] = new T[m_col];
}
for (int i = 0; i < m_row; ++i)
{
for (int j = 0; j < m_col; ++j)
{
mp_data[i][j] = 0;
}
}
}
template
CMatrix::CMatrix(int row, int col, T *data)
{
m_row = row;
m_col = col;
mp_data = new T*[m_row];
for (int i = 0; i < m_row; ++i)
{
mp_data[i] = new T[m_col];
}
for (int i = 0; i < m_row; ++i)
{
for (int j = 0; j < m_col; ++j)
{
mp_data[i][j] = data[j + i * m_col];
}
}
}
template
CMatrix::CMatrix(CMatrix& m2)
{
m_row = m2.m_row;
m_col = m2.m_col;
mp_data = new T*[m_row];
for (int i = 0; i < m_row; ++i)
{
mp_data[i] = new T[m_col];
}
for (int i = 0; i < m_row; ++i)
{
for (int j = 0; j < m_col; ++j)
{
mp_data[i][j] = m2.mp_data[i][j];
}
}
}
template
void CMatrix::PrintMat()
{
for (int i = 0; i < m_row; ++i)
{
for (int j = 0; j < m_col; ++j)
{
cout << mp_data[i][j] << " ";
}
cout << endl;
}
}
int main(void)
{
int data[] = {1,2,3,4,5,6};
CMatrix mat1;
mat1.PrintMat();
CMatrix mat2(2,2);
mat2.PrintMat();
CMatrix mat3(2,3,data);
mat3.PrintMat();
CMatrix mat4(mat3);
mat4.PrintMat();
return 0;
}