【问题标题】:Error: no match for ‘operator*’ (operand types are ‘std::vector<std::complex<double> >’ and ‘std::complex<double>’)错误:“operator*”不匹配(操作数类型为“std::vector<std::complex<double> >”和“std::complex<double>”)
【发布时间】:2017-09-04 13:06:35
【问题描述】:

我使用带有复数的向量类,我必须将一个复数向量与一个复数相乘,如下所示:

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&lt;std::complex&lt;double&gt; &gt;’ and ‘std::complex&lt;double&gt;’)

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

【问题讨论】:

    标签: c++ vector complex-numbers


    【解决方案1】:

    是的,这是可能的。以下是如何为complex&lt;T&gt; 实现自己的运算符*

    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;
    }
    

    【讨论】:

    • 我已编辑删除滚动条。有趣的问题是,这是否比格式正确的 vector&lt;complex&lt;T&gt;&gt; res(v); for (auto&amp; x: res) x*=z; return res; 版本更易于阅读,以及相关的性能特征是什么。
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多