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

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

 1.完整代码如下:

#include 
#include 
#include 
#include 
using namespace std;
struct Matrix
{
	vector> 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 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(t2 - t1).count();

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

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

}

2.后期的扩展方向:

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

你可能感兴趣的:(技术分享,学习笔记,c++,矩阵)