operator写在结构体里面和外面有什么区别?
  • 板块学术版
  • 楼主ZXX666
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/11/15 20:39
  • 上次更新2023/11/4 00:27:48
查看原帖
operator写在结构体里面和外面有什么区别?
314326
ZXX666楼主2021/11/15 20:39

如题,请问有没有C++大佬知道这两种写法的不同? 在做矩阵快速幂一题中使用的这两种方法,但是第一种写了好久没有过(全WA);但是第二种就过了


第一种:写在里面

#include <iostream>
using namespace std;
const long long mod = 1e9 + 7;
struct matrix
{
	long long n;
	long long a[105][105];
	matrix ()
	{
		for (long long i = 1;i <= n;i++)
			for (long long j = 1;j <= n;j++)
				a[i][j] = 0;
	}
	matrix (long long x)
	{
		n = x;
		for (long long i = 1;i <= n;i++)
			for (long long j = 1;j <= n;j++)
				a[i][j] = 0;
		for (long long i = 1;i <= n;i++)
			a[i][i] = 1;
	}
	matrix operator * (const matrix & x) const
	{
		matrix ans;
		ans.n = n;
		for (long long k = 1;k <= n;k++)
			for (long long i = 1;i <= n;i++)
				for (long long j = 1;j <= n;j++)
				{
					ans.a[i][j] += a[i][k] * x.a[k][j] % mod;
					ans.a[i][j] %= mod;
				}
		return ans;
	}
};
long long n;
long long p;
........

第二种: 写在外面

#include <iostream>
using namespace std;
const long long mod = 1e9 + 7;
struct matrix
{
	long long n;
	long long a[105][105];
	matrix ()
	{
		for (long long i = 1;i <= n;i++)
			for (long long j = 1;j <= n;j++)
				a[i][j] = 0;
	}
	matrix (long long x)
	{
		n = x;
		for (long long i = 1;i <= n;i++)
			for (long long j = 1;j <= n;j++)
				a[i][j] = 0;
		for (long long i = 1;i <= n;i++)
			a[i][i] = 1;
	}
	
};
long long n, p;
matrix operator * (const matrix & x, const matrix & y)
{
	matrix ans;
	ans.n = n;
	for (long long i = 1;i <= n;i++)
		for (long long j = 1;j <= n;j++)
			for (long long k = 1;k <= n;k++)
			{
				ans.a[i][j] += y.a[i][k] * x.a[k][j] % mod;
				ans.a[i][j] %= mod;
			}
	return ans;
}
.......

请问各位有知道这两种方法的区别吗?

2021/11/15 20:39
加载中...