#include <iostream>
#include <iomanip>
using namespace std;
class Vector;
class Matrix
{
private:
int *p;
int len;
public:
Matrix(int n)
{
len = n;
p = new int[n * n]; //创建动态数组
for (int i = 0; i < n * n; i++)
p[i] = 0; //初始化矩阵
};
void Display()
{
cout<<"Matrix is:"<<endl; //显示矩阵
for (int i = 0; i < len * len; i++)
{
if (i % len == len - 1)
cout<<setw(4)<<p[i]<<endl;//矩阵行末换行
else
cout<<setw(4)<<p[i]<<" ";
}
};
void Multiply(Vector&); //定义矩阵与向量乘积函数
void Input()
{
cout<<"输入 "<<len * len<<" 个整数:";
for (int i = 0; i < len * len; i++) //定义矩阵输入函数
cin>>p[i];
};
void operator[](int index) //[]操作符重载(只是显示)
{cout<<p[index]<<endl;};
void add(Matrix& v) //加法
{for (int i=0;i<len*len;i++)
p[i]=p[i]+v.p[i];
cout<<"矩阵的和为:"<<endl;
for ( i = 0; i < len * len; i++)
{
if (i % len == len - 1)
cout<<setw(4)<<p[i]<<endl;
else
cout<<setw(4)<<p[i]<<" ";
}
};
int finddex(int x) //输入序号,查找内容
{int t;
t=p[x];
return t;}
int findnum(int num) //输入内容,查找序号
{for (int i=0;i<len*len;i++)
{if (p[i]==num)
{return i;break;}
else
return -1;}}
void sort() //(升序)排序
{for (int i=0;i<len*len-1;i++)
for (int j=1;j<len*len-i;j++)
{
if(p[i]>p[i+j])
{int temp=p[i];
p[i]=p[i+j];
p[i+j]=temp;}
}}
~Matrix()
{
delete [] p; //析构函数中释放动态创建的空间
};
};
class Vector//结构同矩阵
{
private:
int *p;
int len;
public:
Vector(int n)
{
len = n;
p = new int[n];
for (int i = 0; i < n; i++)
p[i] = 0;
};
friend void Matrix::Multiply(Vector&);//定义友元函数头
void Input()
{
cout<<"输入"<<len<<" 个整数:";
for (int i = 0; i < len; i++)
cin>>p[i];
}
void Display()
{
cout<<"Vector is:"<<endl;
for (int i = 0; i < len; i++)
{
cout<<setw(4)<<p[i]<<" ";
}
cout<<endl;
};
void operator[](int index) //[]操作符重载
{cout<<p[index]<<endl;};
void add(Vector& v) //加法
{
for (int i=0;i<len;i++)
{p[i]=p[i]+v.p[i];}
cout<<"向量
的和为:"<<endl;
for ( i = 0; i < len; i++)
{
cout<<setw(4)<<p[i]<<" ";
}
cout<<endl;
}
int finddex(int x) //查找序号
{int t;
t=p[x];
return t;}
int findnum(int num) //查找内容
{for (int i=0;i<len;i
++)
{if (p[i]==num)
{return i;break;}
else
return -1;}}
void sort() //排序
{for (int i=0;i<len-1;i++)
for (int j=1;j<len-i;j++)
{
if(p[i]>p[i+j])
{int temp=p[i];
p[i]=p[i+j];
p[i+j]=temp;}
}}
~Vector()
{
delete [] p;
};
};
void Matrix::Multiply(Vector &v)
{
int *r = new int[len];
int i, j;
for (i = 0; i < len; i++)
{
r[i] = 0;
}
for (i = 0; i < len; i++)
{
for (j = 0; j < len; j++)
{
r[i] += p[i * len + j] * v.p[j]; //因为在Vector中定义该函数为友元函数所以可以访问v中的私有成员p
}
}
cout<<"乘积为:"<<endl;
for (i = 0; i < len; i++)
{
cout<<setw(4)<<r[i]<<" ";
}
cout<<endl;
delete [] r;
};
void main(void)
{
int n;
cout<<"输入维数:";//输入维数
cin>>n;
Matrix m(n),a(n);//根据维数创建矩阵
Vector v(n),b(n);//根据维数创建向量
cout<<"输入第一个矩阵-->";
m.Input();//输入矩阵m
cout<<"输入第二个矩阵-->";
a.Input();//输入矩阵a
cout<<"输入第一个向量->";
v.Input();//输入向量v
cout<<"输入第二个向量->";
b.Input();//输入向量b
cout<<"第一个矩阵";
m.Display();//显示输入矩阵
cout<<"第二个矩阵";
a.Display();
cout<<"第一个向量";
v.Display();//显示输入向量
cout<<"第二个向量";
b.Display();
cout<<"第一个矩阵和第一个向量的积>>";
m.Multiply(v);//计算乘积,并显示结果
m.add(a);
v.add(b);
cout<<"用重载输出第一个矩阵第一个元素>>";
m[0];//测试[]重载
cout<<"用重载输出第一个向量第一个元素>>";
v[0];//测试[]重载
int t=m.finddex(1);//测试查找
cout<<"第一个矩阵序号为1的内容为:"<<t<<endl;
t=m.findnum(2); //测试查找
cout<<"第一个矩阵内容为2的首序号为:"<<t<<endl;
t=v.finddex(0) ; //测试查找
cout<<"第一个向量第一个数内容为:"<<t<<endl;
t=v.findnum(2) ; //测试查找
cout<<"第一个向量内容为2的首序号为:"<<t<<endl;
m.sort();//测试排序
v.sort();//测试排序
cout<<"第一个矩阵升序为->";
m.Display();
cout<<"第
一个向量升序为->";
v.Display();
}
#include <iostream>
#include <iomanip>
using namespace std;
class Vector;
class Matrix
{
private:
int *p;
int len;
public:
Matrix(int n)
{
len = n;
p = new int[n * n]; //创建动态数组
for (int i = 0; i < n * n; i++)
p[i] = 0; //初始化矩阵
};
void Display()
{
cout<<"Matrix is:"<<endl; //显示矩阵
for (int i = 0; i < len * len; i++)
{
if (i % len == len - 1)
cout<<setw(4)<<p[i]<<endl;//矩阵行末换行
else
cout<<setw(4)<<p[i]<<" ";
}
};
void Multiply(Vector&); //定义矩阵与向量乘积函数
void Input()
{
cout<<"输入 "<<len * len<<" 个整数:";
for (int i = 0; i < len * len; i++) //定义矩阵输入函数
cin>>p[i];
};
void operator[](int index) //[]操作符重载(只是显示)
{cout<<p[index]<<endl;};
void add(Matrix& v) //加法
{for (int i=0;i<len*len;i++)
p[i]=p[i]+v.p[i];
cout<<"矩阵的和为:"<<endl;
for ( i = 0; i < len * len; i++)
{
if (i % len == len - 1)
cout<<setw(4)<<p[i]<<endl;
else
cout<<setw(4)<<p[i]<<" ";
}
};
int finddex(int x) //输入序号,查找内容
{int t;
t=p[x];
return t;}
int findnum(int num) //输入内容,查找序号
{for (int i=0;i<len*len;i++)
{if (p[i]==num)
{return i;break;}
else
return -1;}}
void sort() //(升序)排序
{for (int i=0;i<len*len-1;i++)
for (int j=1;j<len*len-i;j++)
{
if(p[i]>p[i+j])
{int temp=p[i];
p[i]=p[i+j];
p[i+j]=temp;}
}}
~Matrix()
{
delete [] p; //析构函数中释放动态创建的空间
};
};
class Vector//结构同矩阵
{
private:
int *p;
int len;
public:
Vector(int n)
{
len = n;
p = new int[n];
for (int i = 0; i < n; i++)
p[i] = 0;
};
friend void Matrix::Multiply(Vector&);//定义友元函数头
void Input()
{
cout<<"输入"<<len<<" 个整数:";
for (int i = 0; i < len; i++)
cin>>p[i];
}
void Display()
{
cout<<"Vector is:"<<endl;
for (int i = 0; i < len; i++)
{
cout<<setw(4)<<p[i]<<" ";
}
cout<<endl;
};
void operator[](int index) //[]操作符重载
{cout<<p[index]<<endl;};
void add(Vector& v) //加法
{
for (int i=0;i<len;i++)
{p[i]=p[i]+v.p[i];}
cout<<"向量
的和为:"<<endl;
for ( i = 0; i < len; i++)
{
cout<<setw(4)<<p[i]<<" ";
}
cout<<endl;
}
int finddex(int x) //查找序号
{int t;
t=p[x];
return t;}
int findnum(int num) //查找内容
{for (int i=0;i<len;i
++)
{if (p[i]==num)
{return i;break;}
else
return -1;}}
void sort() //排序
{for (int i=0;i<len-1;i++)
for (int j=1;j<len-i;j++)
{
if(p[i]>p[i+j])
{int temp=p[i];
p[i]=p[i+j];
p[i+j]=temp;}
}}
~Vector()
{
delete [] p;
};
};
void Matrix::Multiply(Vector &v)
{
int *r = new int[len];
int i, j;
for (i = 0; i < len; i++)
{
r[i] = 0;
}
for (i = 0; i < len; i++)
{
for (j = 0; j < len; j++)
{
r[i] += p[i * len + j] * v.p[j]; //因为在Vector中定义该函数为友元函数所以可以访问v中的私有成员p
}
}
cout<<"乘积为:"<<endl;
for (i = 0; i < len; i++)
{
cout<<setw(4)<<r[i]<<" ";
}
cout<<endl;
delete [] r;
};
void main(void)
{
int n;
cout<<"输入维数:";//输入维数
cin>>n;
Matrix m(n),a(n);//根据维数创建矩阵
Vector v(n),b(n);//根据维数创建向量
cout<<"输入第一个矩阵-->";
m.Input();//输入矩阵m
cout<<"输入第二个矩阵-->";
a.Input();//输入矩阵a
cout<<"输入第一个向量->";
v.Input();//输入向量v
cout<<"输入第二个向量->";
b.Input();//输入向量b
cout<<"第一个矩阵";
m.Display();//显示输入矩阵
cout<<"第二个矩阵";
a.Display();
cout<<"第一个向量";
v.Display();//显示输入向量
cout<<"第二个向量";
b.Display();
cout<<"第一个矩阵和第一个向量的积>>";
m.Multiply(v);//计算乘积,并显示结果
m.add(a);
v.add(b);
cout<<"用重载输出第一个矩阵第一个元素>>";
m[0];//测试[]重载
cout<<"用重载输出第一个向量第一个元素>>";
v[0];//测试[]重载
int t=m.finddex(1);//测试查找
cout<<"第一个矩阵序号为1的内容为:"<<t<<endl;
t=m.findnum(2); //测试查找
cout<<"第一个矩阵内容为2的首序号为:"<<t<<endl;
t=v.finddex(0) ; //测试查找
cout<<"第一个向量第一个数内容为:"<<t<<endl;
t=v.findnum(2) ; //测试查找
cout<<"第一个向量内容为2的首序号为:"<<t<<endl;
m.sort();//测试排序
v.sort();//测试排序
cout<<"第一个矩阵升序为->";
m.Display();
cout<<"第
一个向量升序为->";
v.Display();
}