C++ 生成任意矩阵并进行乘法运算

 实现了矩阵的生成、乘法运算。

 1.完整代码如下:

#include <iostream>
#include <cstring>
#include <chrono>
#include <vector>
using namespace std;
struct Matrix
{
	vector<vector<int>> M;
	size_t Rows;
	size_t Columns;
	Matrix(size_t r = 0,size_t c=0,int rv = 1)
	{
		Rows = r;
		Columns = c;
		for (size_t i = 0; i < r; i++)
		{
			vector<int> t;
			for (size_t j = 0; j < c; j++)
			{	

				if (rv > 1)
				{
					t.push_back(rand() % rv);
				}
				t.push_back(rv);
			}
			M.push_back(t);
		}
	}

	bool isNull()
	{
		return Rows == 0 || Columns == 0;
	}

	void printMatrix(const char* msg = "")
	{
		if (strlen(msg)>0)
		{
			printf("%s\n", msg);
		}
		for (size_t i = 0; i < Rows; i++)
		{
			for (size_t j = 0; j < Columns; j++)
				printf("%d,",M[i][j]);
			printf("\n");
		}
	}
};
// A*B
Matrix mulMatrix(Matrix a, Matrix b)
{
	if (a.isNull() || b.isNull())
	{
		printf("空矩阵\n");
		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
		return	Matrix();
	}
	if (a.Columns != b.Rows)
	{
		printf("不符合乘法要求的矩阵");
		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
		return	Matrix();
	}

	//如果符合要求,构建一个结果矩阵
	Matrix c(a.Rows, b.Columns);

	for (size_t i = 0; i < a.Rows; i++)
	{
		for (size_t j = 0; j < b.Columns; j++)
		{
			//在进行默认构建时,所有矩阵中的数据全为1,所以此处需要进行置0
			c.M[i][j] = 0;
			for (size_t k = 0; k < a.Columns; k++)
			{
				c.M[i][j] += a.M[i][k] * b.M[k][j];
			}
		}
	}
	return c;
}

int main(int argc, char **argv)
{
	std::cout << "开始执行矩阵运算:(输入0退出程序)" << endl;
	while (true)
	{
		std::cout << "请输入矩阵的阶数:" << endl;

		int len = 0;

		cin >> len;

		cout << "您输入的矩阵阶数为:" << len << endl;

		if (len < 1)
		{
			cout << "无效的阶数:" << len << endl;
			return 0;
		}

		Matrix Ma(len, len, 10);
		//Ma.printMatrix("随机生成的方阵Ma如下:");

		Matrix Mb(len, 1, 10);
		//Mb.printMatrix("随机生成的列向量Mb如下:");

		auto t1 = chrono::steady_clock::now();
		Matrix Mc = mulMatrix(Ma, Mb);

		auto t2 = chrono::steady_clock::now();

		double timeSpan = chrono::duration<double, std::milli>(t2 - t1).count();

		printf("总用时为:%f ms", timeSpan);

		//Mc.printMatrix("----------Ma*Mb的结果如下:----------");
	}
	
	
	return 0;

}

2.后期的扩展方向:

  1. 将结构体封装为一个类,
  2. 编写其他的矩阵操作函数
  3. 运算符的重构

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值