C++实现矩阵

实现功能:

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;
}
发布了8 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_31232793/article/details/104707509