#include<iostream>
#include<iomanip>//setw(n)
#include<valarray>
using namespace std;
template<class T>
void printMatrix(const valarray<T>& a,size_t row,size_t col)
{
size_t siz=row*col;
for(size_t i=0;i<siz;++i)
{
cout<<setw(5)<<a[i];
cout<<((i+1)%col?' ':'\n');
}
cout<<endl;
}
template<class T>
valarray<T> matmult(const valarray<T>& a,size_t arows,size_t acols,
const valarray<T>& b,size_t brows,size_t bcols)
{
valarray<T> result(arows*bcols);//a的行数 b的列数
for(size_t i=0;i<arows;++i)
{
valarray<T> row=a[slice(acols*i,acols,1)];//取a中一行数
for(size_t j=0;j<bcols;++j)
{
valarray<T> col=b[slice(j,brows,bcols)];//取b中一列数
result[i*bcols+j]=(row*col).sum();//得出计算结果sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。[j*bcols+i]
} //而缺省的sum(x)就是竖向相加,求每列的和,结果是行向量。[i*bcols+j]
}
return result;
}
void main()
{
const int N=100;
int i,j,a[N],b[N],w,x,y,z;
cout<<"a矩阵的行与列:";
cin>>w>>z;
cout<<"a矩阵:";
for(i=0;i<w*z;i++)
cin>>a[i];
cout<<"b矩阵的行与列:";
cin>>x>>y;
cout<<"b矩阵:";
for(j=0;j<x*y;j++)
cin>>b[j];
valarray<int> c(a,w*z);
valarray<int> d(b,x*y);
cout<<"a与b矩阵相乘"<<endl;
valarray<int> e(matmult(c,w,z,d,x,y));
printMatrix(e,w,y);
}
#include<iomanip>//setw(n)
#include<valarray>
using namespace std;
template<class T>
void printMatrix(const valarray<T>& a,size_t row,size_t col)
{
size_t siz=row*col;
for(size_t i=0;i<siz;++i)
{
cout<<setw(5)<<a[i];
cout<<((i+1)%col?' ':'\n');
}
cout<<endl;
}
template<class T>
valarray<T> matmult(const valarray<T>& a,size_t arows,size_t acols,
const valarray<T>& b,size_t brows,size_t bcols)
{
valarray<T> result(arows*bcols);//a的行数 b的列数
for(size_t i=0;i<arows;++i)
{
valarray<T> row=a[slice(acols*i,acols,1)];//取a中一行数
for(size_t j=0;j<bcols;++j)
{
valarray<T> col=b[slice(j,brows,bcols)];//取b中一列数
result[i*bcols+j]=(row*col).sum();//得出计算结果sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。[j*bcols+i]
} //而缺省的sum(x)就是竖向相加,求每列的和,结果是行向量。[i*bcols+j]
}
return result;
}
void main()
{
const int N=100;
int i,j,a[N],b[N],w,x,y,z;
cout<<"a矩阵的行与列:";
cin>>w>>z;
cout<<"a矩阵:";
for(i=0;i<w*z;i++)
cin>>a[i];
cout<<"b矩阵的行与列:";
cin>>x>>y;
cout<<"b矩阵:";
for(j=0;j<x*y;j++)
cin>>b[j];
valarray<int> c(a,w*z);
valarray<int> d(b,x*y);
cout<<"a与b矩阵相乘"<<endl;
valarray<int> e(matmult(c,w,z,d,x,y));
printMatrix(e,w,y);
}