我想用std :: transform替换for循环。因为我有一个算法和lambda函数小的经验,我不知道这是正确的方式C++变换和lambda - 替换循环
原始代码
for (size_t i=0; i < dataPhase.size(); ++i)
{
dataPhase[i] = fmod(dataPhase[i], pi*1.00001);
}
的std ::以拉姆达变换
std::transform(dataPhase.begin(), dataPhase.end(), dataPhase.begin(),
[](double v){return fmod(v, pi*1.00001); }
);
,我需要捕获这里?
我可以做些什么来代替在这样的情况下,在使用索引循环,如下面的代码:
const int halfsize = int(length/2);
for (size_t i=0; i < length; ++i)
{
axis[i] = int(i) - halfsize;
}
编辑: 我想扩大的问题(如果允许的话)。
是否有可能与一些不同的东西
for(std::vector<complex<double> >::size_type i = 0; i != data.size(); i++) {
dataAmplitude[i] = abs(data[i]);
dataPhase[i] = arg(data[i]);
}
这里不是原来的矢量被修改替换for循环在这种情况下,但用于两种不同载体的价值。 1
如果你得到的结果,它可能是正确的。你观察到什么?算法在迭代器而不是索引上工作。将第二个片段转换为使用算法没有意义,因为在这种情况下,索引循环更具可读性 – user463035818
'std :: transform'也可用于没有明确索引的类型(如链接列表和所以)。只要前两个参数满足“输入迭代器”类别,第三个参数满足“输出迭代器”要求。因此,函数中没有(概念上的)索引。 – JHBonarius
@Matthias Pospiech试图删除所有for循环之前,也许你可以看看我的评论#1 ....大多数时候这会阻止你使用OpenMP。 –