如果我执行此代码:
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/