【发布时间】:2011-08-08 17:29:31
【问题描述】:
给定 std::complex 的 std::vector,我想将其转换为仅包含复数实部的向量,除以某个常数系数。 现在,我就是这样做的:
std::vector<std::complex<double> > vec;
std::vector<double> realVec;
double norm = 2.0;
...
for (std::vector<std::complex<double> >::iterator it = vec.begin(), itEnd = vec.end(); it != itEnd; ++it)
realVec.push_back((*it).real() / norm);
这当然可以,但我正在寻找一种方法来使用 std::transform 来做同样的事情。我试过了:
transform(vec.begin(), vec.end(), back_inserter(realVec), tr1::bind(divides<double>(), tr1::bind(&complex<double>::real, tr1::placeholders::_1), norm));
但这行不通。我有这个错误:
erreur: no matching function for call to ‘bind(<unresolved overloaded function type>, std::tr1::_Placeholder<1>&)’|
我不明白为什么会有“未解析的重载函数类型”。
谁能给我解释一下怎么回事?
【问题讨论】:
-
我知道这可能是异端,但 IMO 使用 for 循环的版本要清晰得多。
标签: c++ bind transform complex-numbers