📄 矩阵与向量.h
字号:
Vector::Vector(int s)
{
if(s<=0)
{
cerr<<"bas Vector size."<<endl;
exit(1);
}
sz=s;
v=new int[s];
}
int & Vector::Elem(int i)
{
if(i<0||sz<=i)
{
cerr<<"Vector index out of range."<<endl;
exit(1);
}
return v[i];
}
Vector::Vector(Vector & vec)
{
v=new int[sz=vec.sz];
memcpy((void*)v,(void*)vec.v,sz*sizeof(int));
}
void Vector::Display()
{
for(int i=0;i<sz;i++)
cout<<v[i]<<" ";
cout<<endl;
}
class Matrix
{
friend Vector Multiply(Matrix &m,Vector &v);
public:
Matrix(int,int);
Matrix(Matrix &);
~Matrix(){delete[]m;}
int & Elem(int,int);
protected:
int *m;
int szl;//行
int szr;//列
};
Matrix::Matrix(int i,int j)
{
if(i<=0||j<=0)
{
cerr<<"bad Matrix size."<<endl;
exit(1);
}
szl=i;
szr=j;
m=new int[i*j];
}
Matrix::Matrix(Matrix& mat)
{
szl=mat.szl;
szr=mat.szr;
m=new int[szl*szr];
memcpy((void*)m,(void*)mat.m,szl*szr*sizeof(int));
}
int & Matrix::Elem(int i,int j)//引用返回的目的是返回值可以做左值
{
if(i<0||szl<=i||j<0||szr<=j)
{
cerr<<"Matrix index out of range."<<endl;
exit(1);
}
return m[i*szr+j];
}
Vector Multiply(Matrix &m,Vector &v)
{
if(m.szr!=v.sz)
{
cerr<<"bad multiply Matrix with Vector."<<endl;
exit(1);
}
Vector r(m.szl);
for(int i=0;i<m.szl;i++)
{
r.v[i]=0;
for(int j=0;j<m.szr;j++)
r.v[i]+=m.m[i*m.szr+j]*v.v[j];
}
return r;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -