inner_product和复杂的向量

时间:2012-05-12 17:04:46

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

我在这里做的事情似乎非常错误。你能帮助我吗?目的是将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;
}

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

1 个答案:

答案 0 :(得分:3)

问题是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<double>

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<double>,它只是将0.解释为double

相关问题