Matrix
//transpote转置矩阵
#include "Stdio.h"
#include "memory.h"
template
<
typename
T>
void
TypePrint(T v);
template
<
typename
T,
int
M,
int
N>
class
Matrix
{
public
:
Matrix(
void
){
data =
new
T[M*N];
};
~Matrix(
void
){};
int
getVIndex()
{
return
M;
}
int
getHIndex()
{
return
N;
}
T getxy(
int
x,
int
y)
{
return
data[x*N+y];
}
void
setxy(
int
x,
int
y,T f)
{
data[x*N + y] = f;
}
void
setdata(T*datap,
int
size)
{
memcpy
(data,datap,size);
}
Matrix<T,N,M> transpote()
{
Matrix<T,N,M> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
m.setxy(j,i,getxy(i,j));
}
}
return
m;
}
Matrix<T,M,N> operator+(Matrix<T,M,N> &adv)
{
Matrix<T,N,M> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
m.setxy(getxy(i,j)+adv.getxy(i,j));
}
}
return
m;
}
Matrix<T,M,N> operator-(Matrix<T,M,N> &adv)
{
Matrix<T,N,M> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
m.setxy(getxy(i,j)-adv.getxy(i,j));
}
}
return
m;
}
bool
operator==(Matrix<T,M,N> &adv)
{
Matrix<T,N,M> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
if
(getxy(i,j)!=adv.getxy(i,j))
return
false
;
}
}
return
true
;
}
bool
operator!=(Matrix<T,M,N> &adv)
{
Matrix<T,N,M> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
if
(getxy(i,j)!=adv.getxy(i,j))
return
true
;
}
}
return
false
;
}
void
print()
{
printf
(
"\n"
);
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
TypePrint(getxy(i,j));
printf
(
",\t"
);
}
printf
(
"\n"
);
}
}
private
:
T *data;
};
template
<
typename
T,
int
M,
int
N,
int
P>
Matrix<T,M,P> operator*(Matrix<T,M,N> &x, Matrix<T,N,P> &y)
{
Matrix<T,M,P> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < P; j++)
{
T v = 0;
for
(
int
k = 0; k < N; k++)
{
v += (x.getxy(i,k)*y.getxy(k,j));
}
m.setxy(i,j,v);
}
}
return
m;
}
template
<
typename
T,
int
M,
int
N>
Matrix<T,M,N> operator*(Matrix<T,M,N> &x, T y)
{
Matrix<T,M,N> m;
for
(
int
i = 0; i < M; i++)
{
for
(
int
j = 0; j < N; j++)
{
m.setxy(i,j,m.getxy(i,j)*y);
}
}
return
m;
}
template
<
typename
T,
int
M,
int
N>
Matrix<T,M,N> operator*(T y,Matrix<T,M,N> &x)
{
return
x*y;
}
template
<>
void
TypePrint(
float
v)
{
printf
(
"%f"
,v);
}
template
<>
void
TypePrint(
int
v)
{
printf
(
"%d"
,v);
}
#define type float
int
d1[] =
{
1,2,
2,3,
3,0
};
int
d2[] =
{
2,-3,0,
0,1,-2,
-4,5,10
};
int
main()
{
Matrix<
int
,3,2> s;
s.setdata(d1,
sizeof
(d1));
Matrix<
int
,3,3> s1;
s1.setdata(d2,
sizeof
(d2));
Matrix<
int
,3,2> s2 = s1*s;
Matrix<
int
,2,3> s3 = s2.transpote();
//转置了
s.print();
s1.print();
s2.print();
s3.print();
return
0;
}
分类:
[002] C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2014-11-08 恢复SD卡错删数据
2013-11-08 Holiday、Vacation、Days off、Leave、Break