2011-07-06 240 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(它也包含一些僞代碼)。