2011-07-06 191 views
-2

我正在制作一个程序,可以乘以用户定义大小的矩阵。我使用向量来存储矩阵中的值。矩阵乘法与向量 - C++

void Multiply(vector<float> A,vector<float> B,int rA, int cA,int rB,int cB) 
{ 
system(CLEARSCREEN); 

vector<float> C; // The resulting matrix 

int sizeA=rA*cA; 
int sizeB=rB*cB; 
int sizeC=rA*cB; 

int lrA=sizeA-1; 
int lrB=sizeB-1; 

int writeHead=0; 

A.resize(sizeA); 
B.resize(sizeB); 
C.resize(sizeC); 

demoDisplay(rA,rB,cA,cB,lrA,lrB,sizeA,sizeB); 

for(;writeHead<=lrA; writeHead++) 
{ 
    cout << "Please enter a value for \"" << alphabet[writeHead] << "\" in MATRIX A.\n"; 
    cin >> A[writeHead]; 
} 
cout << "\n"; 
writeHead=0; 
for (;writeHead<=lrB; writeHead++) 
{ 
    cout << "Please enter a value for \"" << alphabet[writeHead] << "\" in MATRIX B.\n"; 
    cin >> B[writeHead]; 
} 

cout << "\n\n"; 

displayMatrices(A,B,rA,rB,cA,cB,lrA,lrB,sizeA,sizeB); 

for (int colRead=0; colRead<=cA; colRead++) { 
    // somehow iterate through each element of the vector? 

} 
} 

我对C++比较陌生,所以我不太确定如何做两个矩阵的实际乘法。如果有人能帮上忙,那会很好。

+9

你知道如何在数学中做矩阵乘法吗? –

+0

一个矢量和一个矩阵在概念上是不同的(即使你可以在另一个中实现一个矢量)。这是你应该在“矩阵”类中自己处理记忆的情况之一 - 毕竟它是C++,这是教师期望的。 – Andrei

+0

为了存储矩阵,您可以使用Boost.org提供的矩阵库工具:http://www.boost.org/doc/libs/1_46_1/libs/numeric/ublas/doc/index.htm –

回答

2

也许你误导了矢量容器的名称,这暗示了一些数学用途。矢量模板不提供任何乘法矩阵甚至乘法矢量的函数。在这种情况下,向量只为您提供一个容器来存储矩阵。显然,你以一些线性化的方式存储矩阵,这将使乘法更复杂。

请务必仔细阅读http://www.cplusplus.com/reference/stl/vector/

而且你不是真的想通过矢量迭代,因为如果是这样的话,你可以只使用一些其他的容器。你想要随机访问来手动增加列和行。为此,您可以使用[] -operator]或at()成员函数。

然后它只是一个手工乘法的问题,例如here(它也包含一些伪代码)。