[英]inner_product and complex vectors
看来我在这里做错了什么。 你能帮助我吗? 目的是对复杂向量使用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;
}
我不明白为什么会有转换问题,似乎所有内容都已定义,并且迭代应该没有问题。
问题是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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.