C++实现矩阵加减乘求转置

本文介绍了如何使用C++实现矩阵的加法、减法、乘法操作,并详细展示了矩阵转置的代码实现,通过实例展示具体运算结果。

一、需求如下:

二、代码如下:

#include<vector>
#include<iostream>
using namespace std;
class Matrix {
public:
	vector<vector<int>> oneMatrix;
	Matrix transposing();
	Matrix operator+(const Matrix& matrix);
	Matrix operator-(const Matrix& matrix);
	Matrix operator*(const Matrix& matrix);
	void display();
};


int main()
{
	
	Matrix A;
	A.oneMatrix = { { 1,2 },{ 3,4 } };
	Matrix B;
	B.oneMatrix = { {1,3},{3,2} };
	Matrix C;
	C.oneMatrix = { {1,3,1},{3,2,2} };

	//A的装置矩阵
	cout << "A的转置矩阵为:" << endl;
	A.transposing().display();

	//C的装置矩阵
	cout << "\n\nC的转置矩阵为:" << endl;
	C.transposing().display();
	
	//A+A的装置
	cout << "\n\nA+A的装置:" << endl;
	Matrix res;
	res = A + A.transposing();
	res.display();
	//(A + A.transposing()).display();

	//A+C
	cout << "\n\nA+C:" << endl;
	(A + C).display();

	//A-B
	cout << "\n\nA-B:" << endl;
	(A - B).display();

	//CA
	cout << "\n\nCA:" << endl;
	if (C.oneMatrix[0].size() == A.oneMatrix.size()) {
		(C*A).display();
	}
	else {
		cout << "矩阵无法进行计算!" << endl;
	}

	//AC
	cout << "\n\nAC" << endl;
	(A*C).display();

	//C的装置乘以C
	cout << "\n\nC的装置乘以C" << endl;
	(C.transposing()*C).display();
    return 0;
}


Matrix Matrix::transposing() {
	Matrix res;
	vector<vector<int>> temp(oneMatrix[0].size(),vector<int>(oneMatrix.size()));
	res.oneMatrix = temp;
	for (int i = 0; i < oneMatrix.size(); i++)
	{
		for (int j = 0; j < oneMatrix[i].size(); j++) {
			res.oneMatrix[j][i] = oneMatrix[i][j];
		}
	}
	
	return res;
}

Matrix Matrix::operator+(const Matrix& matrix) {
	Matrix res;
	vector<vector<int>> temp(oneMatrix.size(), vector<int>(oneMatrix[0].size()));
	res.oneMatrix = temp;
	for (int i = 0; i < oneMatrix.size(); i++) {
		for (int j = 0; j < oneMatrix[i].size(); j++) {
			res.oneMatrix[i][j] = oneMatrix[i][j] + matrix.oneMatrix[i][j];
		}
	}
	return res;
}

Matrix Matrix::operator-(const Matrix& matrix) {
	Matrix res;
	vector<vector<int>> temp(oneMatrix.size(), vector<int>(oneMatrix[0].size()));
	res.oneMatrix = temp;
	for (int i = 0; i < oneMatrix.size(); i++) {
		for (int j = 0; j < oneMatrix[i].size(); j++) {
			res.oneMatrix[i][j] = oneMatrix[i][j] - matrix.oneMatrix[i][j];
		}
	}
	return res;
}

Matrix Matrix::operator*(const Matrix& matrix) {
	int row = oneMatrix.size();
	int col = matrix.oneMatrix[0].size();
	vector<vector<int>> temp(row, vector<int>(col));
	Matrix res;
	res.oneMatrix = temp;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			res.oneMatrix[i][j] = 0;
			for (int k = 0; k < oneMatrix[0].size(); k++) {
				res.oneMatrix[i][j] += oneMatrix[i][k] * matrix.oneMatrix[k][j];
			}
		}
	}
	return res;
}

void Matrix::display()
{
	for (int i = 0; i < oneMatrix.size(); i++) {
		for (int j = 0; j < oneMatrix[i].size(); j++) {
			cout << oneMatrix[i][j] << "\t";
		}
		cout << endl;
	}
}

三、结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值