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

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

我将向量 class 与复数一起使用,我必须将一个复数向量与一个复数相乘,如下所示:

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>’)

是否可以使用这些参数重载 operator*?

是的,这是可能的。以下是如何为 complex<T>:

实现自己的运算符 *
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;
}