矩阵、动态二维数组是一个很基础的结构,在实际使用的时候,需要频繁的创建,释放内存空间,现从面相对象的角度来管理矩阵、二维数组。
#ifndef _MATRIX_H
#define _MATRIX_H
#include <stdexcept>
#include <string.h>
//
// 矩阵,二维数组
//
template <class T>
class matrix
{
private:
T *elements;
int row,col;
public:
matrix(int m, int n):row(m),col(n)
{
elements = new T[m*n];
memset(elements, 0, m*n);
}
matrix(const matrix& mcopy)
{
row = mcopy.getRow();
col = mcopy.getCol();
elements = new T[row*col];
for(int i = 0; i != row; i++)
for(int j = 0; j != col; j++)
elements[i] = mcopy(i, j);
}
~matrix()
{
delete [] elements;
}
//获取第i行,第j列的元素,可用于左值
T& operator()(int i, int j)
{
if(i < 0 || i >= row || j < 0 || j >= col)
throw std::out_of_range("错误的下标");
return elements[i * col + j];
}
int getRow() const
{
return row;
}
int getCol() const
{
return col;
}
};
#endif