gpt4 book ai didi

c++ - inner_product 和复 vector

转载 作者:行者123 更新时间:2023-11-28 00:56:59 26 4
gpt4 key购买 nike

看来我在这里做的事情非常错误。你能帮助我吗?目的是将 inner_product 用于复杂 vector 。

#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 .

关于c++ - inner_product 和复 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com