实现功能:
1.矩阵的两个大括号[][]读取,类似matrix[0][1]这样 ,也可以赋值matrix[0][1] = 10;
2.矩阵的转置 Transposition()
3.矩阵的点成,重载了‘&’符号作为点乘的符号
4.矩阵的叉乘,重载‘*’符号实现
写完大晚上了,有时间再整理注释,
#pragma once
#include <string>
#include <vector>
using namespace std;
int _MATRIX_DATA_COL = 0;
template <typename MATRIX_TYPE>
class MATRIX
{
template <typename _MATRIX_DATA_TYPE>
class _MATRIX_DATA
{
public:
_MATRIX_DATA()
{
this->col = _MATRIX_DATA_COL;
_matrix_data_p = new _MATRIX_DATA_TYPE[_MATRIX_DATA_COL];
}
~_MATRIX_DATA()
{
free(_matrix_data_p);
}
void _MATRIX_DATA_INIT(int len)
{
_matrix_data_p = new _MATRIX_DATA_TYPE[len];
}
_MATRIX_DATA_TYPE& operator[] (int j)
{
return _matrix_data_p[j];
}
private:
int col = 0;
_MATRIX_DATA_TYPE* _matrix_data_p = NULL;
};
public:
MATRIX(int row, int col)
{
this->col = col;
this->row = row;
_MATRIX_DATA_COL = col;
matrix_data_p = new _MATRIX_DATA<MATRIX_TYPE>[row];
}
~MATRIX()
{
delete[] matrix_data_p;
}
MATRIX<MATRIX_TYPE> Transposition()
{
MATRIX<MATRIX_TYPE> TRAN(this->col, this->row);
for (int i = 0; i < this->col; i++)
{
for (int j = 0; j < this->row; j++)
{
TRAN[i][j] = matrix_data_p[j][i];
}
}
}
MATRIX<MATRIX_TYPE> operator&(MATRIX<MATRIX_TYPE> matrix)
{
if (this->col != matrix.col || this->row != matrix.row)
{
throw "these are not equle matrix!";
}
MATRIX<MATRIX_TYPE> result(this->row, this->col);
for (int i = 0; i < this->col; i++)
{
for (int j = 0; j < this->row; j++)
{
result[i][j] = matrix_data_p[i][j] * this->matrix_data_p[i][j];
}
}
return result;
}
_MATRIX_DATA<MATRIX_TYPE>& operator[](int i)
{
return matrix_data_p[i];
}
MATRIX<MATRIX_TYPE> operator*(MATRIX<MATRIX_TYPE> matrix)
{
MATRIX<MATRIX_TYPE> result(this->row, matrix.col);
if (this->col != matrix.row)
{
throw "matrix_1_col != matrix_2_row!";
}
for (int i = 0; i < this->row; i++)
{
for (int j = 0; j < matrix.col; j++)
{
for (int m = 0; m < this->col; m++)
{
result[i][j] += matrix_data_p[i][m] * matrix[m][j];
}
}
}
return result;
}
private:
int row = 0;
int col = 0;
_MATRIX_DATA<MATRIX_TYPE>* matrix_data_p = NULL;
};
typedef vector<vector<double>> Matrix;
int test()
{
double arr[2][2] = { {1,2},{1,3} };
MATRIX<double> matrix(2,3);
double tmp = 1;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
matrix[i][j] = tmp++;
printf("%f\n", matrix[i][j]);
}
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%f\n", matrix[i][j]);
}
printf("\n");
}
printf("****************\n");
printf("00 %f\n", matrix[0][0]);
printf("10 %f\n", matrix[1][0]);
matrix[1][0] = 12;
printf("00 %f\n", matrix[0][0]);
printf("10 %f\n", matrix[1][0]);
printf("8989898\n");
return 0;
}