用C++构造一个矩阵——矩阵的基本运算

首先是矩阵和一般运算最不一样的地方就是乘法,不多说先上代码。

	Matrix operator*(Matrix src)
	{
		
		if (src.row == this->col)
		{
			int same = this->col;
			Matrix out;
			out.row = this->row;
			out.col = src.col;
			out.create();
			for (int i = 0; i < this->row; i++)
				for (int j = 0; j < this->col; j++)
				{
					for (int k = 0; k < same; k++)
						out.data[i][j] += this->data[i][k] * src.data[k][j];
				}
			return out;
		}
		else
		{
			std::cout << "矩阵维度不一致" << std::endl;
		}
	}

代码的时间复杂度是O(n3),计算输出矩阵的每一个位置都需要一个O(n)的复杂度。
在其他地方查阅过一些资料,发现目前最优化的方法也不能达到O(n2),而且还伴随着一系列的使用环境限制。
所以,在这里仅仅使用了传统最基础的办法实现,对于任何矩阵都成立,没有限制。
在这里我进行了对于运算符的重载,该函数仅仅实现了乘法,但是没有为所有if设置返回值,存在一定的问题。
Matrix operator*(Matrix src)
在这里*运算符只有一个成员,其实它还是二元运算符,其中还有一个this指针被省略了
如A * B,其中A就是this,B作为重载运算符的一元输入,对于B * A,则反之。

再就是减法,需要注意的是,但是在VS中如operator-(class a,class b)这样的表达会报错,函数的参数过多。
所以想要写成二元函数的形式,需要将函数声明为友元函数。

	friend Matrix& operator-(Matrix src, Matrix in)
	{
		//Matrix out = Matrix::create(src);
		if (src.col == in.col && src.row == in.row)
		{

			for (int i = 0; i < in.row; i++)
				for (int j = 0; j < in.col; j++)
				{
					src.data[i][j] -= in.data[i][j];
				}
			return src;
		}
		else
		{
			std::cout << "矩阵维度不一致" << std::endl;
		}

	}

加法与其类似

好了,以上就是矩阵的基本运算的实现。下一次,我们来实现矩阵的一些进阶运算,包括行列式,求逆,转置等等。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值