gpt4 book ai didi

c++ - 在 C++ 复 vector 的每个元素上调用 conj() 函数

转载 作者:太空狗 更新时间:2023-10-29 20:02:46 25 4
gpt4 key购买 nike

如果我执行这段代码:

vector<complex<double> >
idft( vector<complex<double> > * v)
{

for_each(v->begin(), v->end(), conj);

然后编译器给我以下错误:

dft.cpp: In function 'std::vector<std::complex<double>, std::allocator<std::complex<double> > > idft(std::vector<std::complex<double>, std::allocator<std::complex<double> > >*)':
dft.cpp:38: error: no matching function for call to 'for_each(__gnu_cxx::__normal_iterator<std::complex<double>*, std::vector<std::complex<double>, std::allocator<std::complex<double> > > >, __gnu_cxx::__normal_iterator<std::complex<double>*, std::vector<std::complex<double>, std::allocator<std::complex<double> > > >, <unresolved overloaded function type>)'

如果我只对一个元素应用 conj() 那么它工作正常:

vector<complex<double> >
idft( vector<complex<double> > * v)
{

conj(v->at(0));

如何在不使用循环的情况下对整个 vector 应用 conj()?

最佳答案

for_each 在现代(C++11 及更高版本)C++ 中很少是个好主意。

void idft( std::vector<std::complex<double> >& v)
{
for (auto& x : v)
x = std::conj(x);
}

甚至:

template<class Range>
void idft( Range& v)
{
for (auto& x : v)
x = std::conj(x);
}

干净、通用、正确且易于阅读。

关于c++ - 在 C++ 复 vector 的每个元素上调用 conj() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479634/

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