Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2013

Vektorer och C++

Hej alla,

Jag försöker bygga en funktion som tar en matris x och en vektor y som input och beräknar vektorn x.y. Min fråga är mycket enkel, varför får jag fel svar med detta:

template<typename T> vector<T> matrixVector(vector<vector<T>> x, vector<T> y) { if(x[0].size() != y.size()) { throw("Unequal length"); } vector<T> outPut(x.size()); for(int j=0; j < x.size(); j++) { for(int i=0; i < y.size(); i++) { outPut[j] = (x[j][i])*y[i]; } } return outPut; }

outPut är en vektor men har fel värden. Jag använder template så att jag slipper specificera datatyp för matriselementen och vektorkomponenterna (inget förändrar om jag tar int eller double etc).

PS4 & Macbook Pro.

Utlandssvensk sedan många år. Citera för svar.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

Du skriver över outPut[j] i varje iteration av den innersta loopen, så outPut[j] kommer att vara lika med (x[x.size()-1][y.size()-1]*y[y.size()-1]. Vad du nog vill göra är att istället lägga till produkten till det gamla värdet i outPut[j].

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2013
Skrivet av perost:

Du skriver över outPut[j] i varje iteration av den innersta loopen, så outPut[j] kommer att vara lika med (x[x.size()-1][y.size()-1]*y[y.size()-1]. Vad du nog vill göra är att istället lägga till produkten till det gamla värdet i outPut[j].

Vilken klant jag är! Att jag inte såg det själv. Nybörjarmiss.

Stort tack för hjälpen!

PS4 & Macbook Pro.

Utlandssvensk sedan många år. Citera för svar.