#include<iostream>
using namespace std;
class shuzu{
int a;
double*b;
public:
shuzu(string str=" "){
const int len=str.length();
char*q=new char[len];
int i,j;
for(i=0;i<len;i++)
q[i]=str[i];
int k=0;
for(i=0;i<len;i++)
{if(k%2==0)
{if(q[i]==',')
k=k+1;}
else {if(q[i]>='0'&&q[i]<='9')
k=k+1;}}//把字符串分成数字片段和非数字片段,并统计片段数量k+1
char**p=new char*[k+1];
for(i=0;i<k+1;i++)
p[i]=new char[len+1];
for(i=0;i<k+1;i++)
{p[i][len]='\n';
for(j=0;j<len;j++)
p[i][j]=' ';}//生成k行的二维数组,并初始化
for(i=0,k=0;i<len;i++)
{if(k%2==0)
{if(q[i]==',')
k=k+1;}
else {if(q[i]>='0'&&q[i]<='9')
k=k+1;}
p[k][i]=q[i];}//把字符串的数字片段填入奇数行,非数字片段填入偶数行
int u,v;
a=(k+2)/2;
b=new double[a];
for(u=0,v=0;u<k+1;u=u+2,v=v+1)
b[v]=atof(p[u]);//把奇数行的数组转化为实数并求和
delete p;
delete q;}
friend int size(shuzu d);//求数组长度的函数
shuzu(shuzu& e){//复制构造
a=e.a;
b=new double[a];
int i;
for(i=0;i<a;i++)
b[i]=e.b[i];}
shuzu operator+(const shuzu& f){//等长数组相加
shuzu e;
int i;
if(f.a==a){
e.b=new double[a];
e.a=a;
for(i=0;i<a;i++)
e.b[i]=b[i]+f.b[i];}
return e;}
shuzu operator+(double x){//数组中所有数字加x
shuzu g;
g.a=a;
g.b=new double[a];
int i;
for(i=0;i<a;i++)
g.b[i]=b[i]+x;
return g;
}
double &operator()(int e){//数组取值
return this->b[e];}
shuzu operator()(int low,int high){//数组裁切
shuzu g;
int i;
if(low>=0&&low<high&&high<=a-1){
g.a=high-low+1;
g.b=new double[g.a];
for(i=0;i<g.a;i++)
g.b[i]=b[low+i];
return g;}}
friend shuzu operator*(double x,const shuzu& h){//数字乘数组
shuzu g;
int i;
g.a=h.a;
g.b=new double[g.a];
for(i=0;i<g.a;i++)
g.b[i]=x*h.b[i];
return g;}
shuzu operator*(double x){//数组乘数字
shuzu g;
g.a=a;
g.b=new double[g.a];
int i;
for(i=0;i<g.a;i++)
g.b[i]=x*b[i];
return g;}
friend double max(shuzu d);
friend double min(shuzu d);//求数组内最大和最小值
friend shuzu sort(shuzu d);//数组从小到大排序
friend double mean(shuzu d);//求数组内元素平均值
friend double sum(shuzu d);//数组求和
friend int find(shuzu d,double x);//某元素在数组内出现的次数
friend void change(const shuzu& g,shuzu d,double x);//必须配合不等号使用,例如change(a,a<100,100)
friend shuzu abs(shuzu d);//数组的绝对值
friend void instead(const shuzu&g,int x,int y,shuzu d);//把数组的第x到y个元素更换为另一个数组的元素,配合数组裁切使用
friend shuzu enlarge(shuzu g,int x,int y,shuzu d);//扩充数组
friend shuzu zeros(int x);//生成指定大小的零数组
shuzu(int x){//定义一个已知长度的数组
a=x;
b=new double[a];}
//shuzu(matrix g,int x){//用矩阵获得数组
//a=g.n;
//b=new double[a];
//int i;
//for(i=0;i<a;i++)
// b[i]=g.p[x][i];}
shuzu operator<(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]<x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]<x) {
g.b[j]=i;
j=j+1;}
return g;}
shuzu operator<=(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]<=x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]<=x) {
g.b[j]=i;
j=j+1;}
return g;}
shuzu operator>(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]>x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]>x) {
g.b[j]=i;
j=j+1;}
return g;}
shuzu operator>=(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]>=x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]>=x) {
g.b[j]=i;
j=j+1;}
return g;}
shuzu operator==(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]==x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]==x) {
g.b[j]=i;
j=j+1;}
return g;}
shuzu operator!=(double x){
shuzu g;
int i,j=0;
for(i=0;i<a;i++)
if(b[i]!=x) j=j+1;
g.a=j;
g.b=new double[j];
for(i=0,j=0;i<a;i++)
if(b[i]!=x) {
g.b[j]=i;
j=j+1;}
return g;}
};
int size(shuzu d){
return d.a;}
double max(shuzu d){
int i;
double big=d.b[0];
for(i=0;i<d.a;i++)
if(big<d.b[i])
big=d.b[i];
return big;}
double min(shuzu d){
int i;
double small=d.b[0];
for(i=0;i<d.a;i++)
if(small>d.b[i])
small=d.b[i];
return small;}
shuzu sort(shuzu d){
int i,j;
double b,c;
shuzu g=d;
for(i=0;i<g.a;++i)
for(j=1;j<g.a-i;++j)
if(g.b[i]>g.b[i+j])
{b=g.b[i];
c=g.b[i+j];
g.b[i+j]=b;
g.b[i]=c;}
return g; }
double mean(shuzu d){
double x=0;
int i;
for(i=0;i<d.a;i++)
x=x+d.b[i];
x=x/d.a;
return x;}
double sum(shuzu d){
double x=0;
int i;
for(i=0;i<d.a;i++)
x=x+d.b[i];
return x;}
int find(shuzu d,double x){
int y=0;
int i;
for(i=0;i<d.a;i++)
if(d.b[i]==x)
y=y+1;
return y;}
void change(const shuzu& g,shuzu d,double x){
int i,j;
for(i=0;i<d.a;i++){
j=d.b[i];
g.b[j]=x;}}
shuzu abs(shuzu d){
shuzu g=d;
int i;
for(i=0;i<g.a;i++)
if(g.b[i]<0)
g.b[i]=-1*g.b[i];
return g;}
void instead(const shuzu&g,int x,int y,shuzu d){
if(d.a==y-x+1&&x>=0&&y<g.a){
int i;
for(i=0;i<d.a;i++)
g.b[x+i]=d.b[i];}
else std::cout<<"替换失败";
}
shuzu enlarge(shuzu g,int x,int y,shuzu d){
if(d.a==y-x+1&&y>=g.a&&x>=0){
shuzu h;
h.a=y+1;
h.b=new double[h.a];
int i;
for(i=0;i<g.a;i++)
h.b[i]=g.b[i];
for(i=g.a;i<h.a;i++)
h.b[i]=0;
for(i=0;i<d.a;i++)
h.b[x+i]=d.b[i];
return h;}
else std::cout<<"扩充失败";}
shuzu zeros(int x){
shuzu g;
g.a=x;
g.b=new double[x];
int i;
for(i=0;i<x;i++)
g.b[i]=0;
return g;}
class matrix{
private:int m;
int n;
double**p;
public:
matrix(int x=1,int y=1){//生成m行n列矩阵
m=x; n=y;
p=new double*[m];
int i;
for(i=0;i<m;i++)
p[i]=new double[n];}
matrix(matrix& g){//复制构造
m=g.m; n=g.n;
p=new double*[m];
int i;
for(i=0;i<m;i++)
p[i]=new double[n];}
matrix(shuzu g){//用数组获得矩阵
m=1; n=size(g);
p=new double*[1];
p[0]=new double[n];
int i;
for(i=0;i<n;i++)
p[0][i]=g(i);}
matrix operator+(const matrix& f){//等大小矩阵相加
matrix e;
if(f.m==m&&f.n==n){
e.m=m; e.n=n;
e.p=new double*[m];
int i;
for(i=0;i<m;i++)
e.p[i]=new double[n];
int j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
e.p[i][j]=p[i][j]+f.p[i][j];
return e;}}
matrix operator+(double x){//矩阵中所有数字加x
matrix g;
g.m=m; g.n=n;
g.p=new double*[m];
int i;
for(i=0;i<m;i++)
g.p[i]=new double[n];
int j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
g.p[i][j]=p[i][j]+x;
return g;}
double &operator()(int x,int y){//矩阵取值
return p[x][y];}
shuzu& operator[](int x){//矩阵里获得数组
shuzu g(n);
int i;
for(i=0;i<n;i++)
g(i)=p[x][i];
return g;}
matrix operator()(int low,int high,int x,int y){//矩阵裁切
matrix g;
if(low<=high&&x<=y&&low>=0&&x>=0&&high<g.m&&y<g.n){
g.m=high-low+1;
g.n=y-x+1;
g.p=new double*[g.m];
int i;
for(i=0;i<g.m;i++)
g.p[i]=new double[g.n];
int j;
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
g.p[i][j]=p[i+low][j+x];
return g;}}
friend matrix operator*(double x,const matrix& h){//数字乘数组
matrix g;
g.m=h.m; g.n=h.n;
g.p=new double*[g.m];
int i;
for(i=0;i<g.m;i++)
g.p[i]=new double[g.n];
int j;
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
g.p[i][j]=h.p[i][j]*x;
return g;}
matrix operator*(double x){//矩阵乘数字
matrix g;
g.m=m; g.n=n;
int i;
for(i=0;i<g.m;i++)
g.p[i]=new double[g.n];
int j;
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
g.p[i][j]=p[i][j]*x;
return g;}
friend shuzu size(matrix g);
friend double max(matrix g);
friend double min(matrix g);
friend matrix reshape(matrix g,int x);//重新改变矩阵的长宽
friend matrix zeros(int x,int y);
friend void imshow(matrix g);
};
shuzu size(matrix g){
shuzu h(2);
h(0)=g.m;
h(1)=g.n;
return h;}
double max(matrix g){
int i,j;
double big=g.p[0][0];
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
if(big<g.p[i][j])
big=g.p[i][j];
return big;}
double min(matrix g){
int i,j;
double small=g.p[0][0];
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
if(small>g.p[i][j])
small=g.p[i][j];
return small;}
matrix reshape(matrix g,int x){
if((g.m*g.n)%x==0){
int y=g.m*g.n/x;
matrix g;
g.m=x; g.n=y;
g.p=new double*[g.m];
int i;
for(i=0;i<g.m;i++)
g.p[i]=new double[g.n];
shuzu c;
c=g[0];
for(i=1;i<g.m;i++){
shuzu d;
d=g[i];
c=enlarge(c,size(c),size(c)-1+g.n,d);}
int k=-1;
for(i=0;i<size(c);i++){
if(i%g.n==0) k=k+1;
g.p[k][i%g.n]=c(i);}
return g;}}
matrix zeros(int x,int y){
matrix g;
g.m=x; g.n=y;
g.p=new double*[g.m];
int i;
for(i=0;i<g.m;i++)
g.p[i]=new double[g.n];
int j;
for(i=0;i<g.m;i++)
for(j=0;j<g.n;j++)
g.p[i][j]=0;
return g;}
void imshow(matrix g){
int i,j=0;
for(i=0;i<g.m;i++){
if(j==g.n) cout<<endl;
for(j=0;j<g.n;j++)
std::cout<<g.p[i][j]<<" ";}}
int main(){
shuzu a("4,4,4,4,4");
matrix b;
b=zeros(5,10);
imshow(b);
return 0;}
那要看x,y是不是0了