如果我执行此代码:

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/

10-12 23:58