Przeciążanie operatora dla vector
Ostatnio zmodyfikowano 2017-06-02 10:51
wokub Temat założony przez niniejszego użytkownika |
Przeciążanie operatora dla vector » 2017-06-02 10:24:38 Siemka. Mam jedno zadanie do zrobienia i mam problem. Otóż przeciążając operator * dla vector, działa on tylko w przypadku pierwszego wektora. Tutaj kod: #include <iostream> #include <vector> #include <climits>
using namespace std;
double operator *( vector < double > v1, vector < double > v2 ) { int n = v1.size(); for( int i = 0; i < n; i++ ) return( v1[ i ] * v2[ i ] ) +( v1[ i + 1 ] * v2[ i + 1 ] ); }
int main() { vector < double > v; v.reserve( 2 ); v.push_back( 1 ); v.push_back( 5 ); vector < double > w; w.reserve( 2 ); w.push_back( 2 ); w.push_back( 5 ); cout << v * w; cout << "\n"; vector < double > vdwa; vdwa.reserve( 4 ); vdwa.push_back( 4 ); vdwa.push_back( 2 ); vdwa.push_back( 4 ); vdwa.push_back( 3 ); vector < double > wdwa; wdwa.reserve( 4 ); wdwa.push_back( 8 ); wdwa.push_back( 4 ); wdwa.push_back( 3 ); wdwa.push_back( 6 ); cout << wdwa * vdwa; }
i mam output: 27 40 Nie jestem w stanie stwierdzić dlaczego tak się dzieje, że zawsze liczy mi tylko dwa pierwsze elementy wektora. A, ważna informacja, przeciążenie ma dot. wektora o każdej długości... Bez tego byłoby to za łatwe. Czy ktoś jest w stanie zauważyć błąd w moim kodzie? Z góry byłbym bardzo wdzięczny. |
|
Anim |
» 2017-06-02 10:44:02 Trochę przedobrzyłeś z operatorem :) zauważ, że zrobiłeś return w forze, czyli założyłeś, że wykona się jedna pętla :) I Twój operator automatycznie miał przypisanie tylko dwóch obliczeń (dla i=0, oraz dla i = 0 + 1) Tutaj masz poprawiony operator: #include <iostream> #include <vector> #include <climits>
using namespace std;
double operator *( const vector < double > v1, const vector < double > v2 ) { int n = v1.size(); int suma = 0; for( int i = 0; i < n; i++ ) suma +=( v1[ i ] * v2[ i ] ); return suma; }
Mam nadzieję, że widzisz co robiłeś źle :) Warto pamiętać o słowie "const" w nawiasach :) |
|
karambaHZP |
» 2017-06-02 10:44:17 Podaj więcej szczegółów. Jakiego spodziewasz się outputa. Na czym miałoby polegać mnożenie vectorów.
Bardzo nieintuicyjne. Mnożenie wektorów zwraca sumę iloczynów poszczególnych elementów. |
|
Anim |
» 2017-06-02 10:51:18 @karambaHZP Twoje podejście jest chyba bardziej dydaktyczne niż moje :)
@wokub w tym co napisałem jeszcze jest jedno duże ALE: musisz mieć pewność, że przekazujesz wektory o tych samych rozmiarach, w innym wypadku będzie się psuło. Trzeba to zabezpieczyć :) |
|
« 1 » |