我有一个仿函数,它创建了一组线性间隔的值。. .
//Linear spaced generator
struct gen_lin {
float mi, inc;
public:
gen_lin(float _mi=1.f, float _inc=1.f) : mi(_mi), inc(_inc){};
float operator()() {
return mi+=inc;
}
};
我可以用这样的值填充一个向量......
const size_t elements = 400;
std::vector<float> x(elements);
std::generate_n(x.begin(), elements, gen_lin(10.f,5.f) );
现在,我可以使用像这样的 lambda 轻松地将其转换为对数刻度......
auto lin = gen_lin(10.f,5.f);
std::generate_n(x.begin(), elements, [&](){return logf(lin());} );
但是当我尝试将它全部压缩到一行时,向量完全被 logf(10.) 的值填充。
std::generate_n(x.begin(), elements, [](){return logf( gen_lin(10.f,5.f)() );} );
为什么,是否可以调整我的最后一行代码以使其工作?