【问题标题】:inner_product and complex vectorsinner_product 和复向量
【发布时间】:2012-05-12 17:04:45
【问题描述】:

看来我在这里做错了什么。你能帮助我吗?目的是将 inner_product 用于复杂向量。

#include<iostream>
#include<vector>
#include <numeric>
#include <complex>


using namespace std; 



template<class T>
complex< T > complex_prod(complex< T > a, complex< T > b)
{
 return conj<T>(a)*b; 
}

template<class T>
complex< T > add_c(complex< T > a, complex< T > b)
{
  return a+b;
}

int main()
{
  complex<double> c1(1.,3.);
  complex<double> c2(2.,4.);

  vector<complex<double> > C1(3,c1);
  vector<complex<double> > C2(3,c2);

 cout<<inner_product(C1.begin(),C2.end(),C2.begin(),0.,add_c<double>,complex_prod<double>) <<endl;

return 0;
}

我不明白为什么会出现转换问题,一切似乎都已定义,迭代应该没有问题。

【问题讨论】:

    标签: c++ complex-numbers dot-product


    【解决方案1】:

    问题是inner_product需要知道初始值的类型,所以你需要传递一个std::complex而不是0.

    inner_product(C1.begin(),C2.end(),C2.begin(),std::complex<double>(0.,0.),add_c<double>,complex_prod<double>);
    

    或者简单地说,

    inner_product(C1.begin(),C2.end(),C2.begin(),std::complex<double>(),add_c<double>,complex_prod<double>);
    

    虽然std::complex&lt;double&gt; 可以从单个数字类型隐式构造

    std::complex<double> c = 2.*4.*300;
    

    inner_product 模板看起来像

    template<
        class InputIterator1,
        class InputIteratorr2,
        class T,
        class BinaryOperation1,
        class BinaryOperation2
    > T inner_product( InputIterator1 first1, InputIterator1 last1,
                       InputIterator2 first2, T value,
                       BinaryOperation1 op1,
                       BinaryOperation2 op2 );
    

    所以value 有一个模板参数。所以编译器不可能知道你的意思是std::complex&lt;double&gt;,它只是将0.解释为double

    【讨论】:

    • 谢谢!为什么 0. 不转换?加法:complex(0.,0.)
    • @pawel_winzig 我必须说,我不确定!隐式转换应该起作用了。我会尝试重现您的错误。
    • @JamesCuster 我想通了。
    • @pawel_winzig 明白了,添加了解释。
    • 谢谢!我不小心提取类型的时间。我的错误假设是它是从 first1...dangerous 中提取的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2016-09-19
    • 2017-12-22
    • 2019-02-09
    相关资源
    最近更新 更多