2017-09-04 4 views
1

Ich verwende die Vektorklasse mit komplexen Zahlen und ich muss multiplizieren einen Vektor von komplexen Zahlen mit einer komplexen Zahl, wie folgt aus:Fehler: keine Übereinstimmung für 'operator *' (Operandentypen sind 'std :: vector <std :: komplex <double>>' und 'std :: komplex <double>')

vector< complex<double> > vec; 
complex<double> z; 
// some initialization of vec and z ... 
vector< complex<double> > res; 
res = vec*z; // here is the error 

error: no match for ‘operator*’ (operand types are ‘std::vector<std::complex<double> >’ and ‘std::complex<double>’)

Ist es möglich Betreiber zu überlasten * mit diesen Parametern?

Antwort

2

Ja, das ist möglich. Hier ist, wie Sie Ihre eigenen Operator * für complex<T> implementieren können:

template <typename T> 
vector<complex<T>> operator *(const vector<complex<T>>& v, const complex<T> z) { 
    vector<complex<T>> res; 
    transform(v.begin(), v.end(), back_inserter(res), 
     [&](complex<T> x) -> complex<T> { 
      return x * z; 
     }); 
    return res; 
} 
+0

Danke, es funktioniert genau, wie ich es brauche. – Pekov

+2

Ich habe bearbeitet, um die Bildlaufleiste zu entfernen. Interessante Frage, ob dies einfacher zu lesen ist als eine korrekt formatierte Version von 'vector > res (v); für (auto & x: res) x * = z; return res; 'und was die relativen Leistungsmerkmale sind. –

Verwandte Themen