您的位置:首页 > 其它

动态大小的矩阵相乘模板

2017-03-20 16:03 218 查看
小试牛刀,随便写了一个小程序。

#include <bits/stdc++.h>
using namespace std;

template<typename T>//动态矩阵相乘模板
void matrixMultiplication( vector< vector<T> > &res, vector< vector<T> > &src1, vector< vector<T> > &src2 ,size_t  row1 ,  size_t col1  ,  size_t col2  ){//引用传递
size_t i, j, k;// ( 64 bits is long) unsigned int
vector<T> temp;
T t;
for(i=0; i<row1; ++i){//实现矩阵相乘 res = src1 * src2 .
temp.clear();
for(j=0; j<col2; ++j){
t = 0;
for(k=0; k<col1; ++k)
t += src1[i][k]*src2[k][j];
temp.push_back(t);//单个单个的填充每一行的元素
}
res.push_back(temp);//一行一行的填充整个矩阵
}
}
template<typename T>//动态矩阵的读入
void    matrixInit( vector<vector<T> > &src, size_t m,  size_t n){// m x n 矩阵
size_t i,j;
vector<T> temp;
T t;
for( i=0; i<m; ++i){
for( j=0; j<n; ++j){
cin>>t;
temp.push_back(t);//读入元素
}
src.push_back(temp);//读入行
temp.clear();
}
}
template<typename T>
void matrixOutput(vector<vector<T> > &src){
size_t i,j;
for( i=0; i<src.size(); ++i){
vector <T> temp( src[i] );//构造复制
//  vector<T> v1(v2);  相当于    v1.assign(v2.begin(), v2.end());
for( j=0; j<temp.size(); ++j)
cout<<temp[j]<<" ";
cout<<endl;
}
}
int main(){
vector<vector<int> > a,b,result;// res = a x b .
size_t m, n, v;
cout<<"Please input your matrix's row and col :"<<endl;
scanf("%d x %d",&m,&n);
matrixInit( a, m, n);
cout<<"Please input your matrix's row and col :"<<endl;
scanf("%d x %d",&n,&v);
matrixInit( b, n ,v);
matrixMultiplication( result, a, b, m, n, v);
cout<<"The result of your matrics' multiplication is "<<endl;
matrixOutput( result);
return 0;
}


这里用到的计算是最原始的定义法,可能的话,我会写出一些经过优化的代码贴上来。待更,持续更新中……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  矩阵 矩阵乘法 泛型