我正在对 vector (权重)进行简单的归一化,试图利用STL算法使代码尽可能清晰(我意识到这对于for循环来说是微不足道的):
float tot = std::accumulate(weights.begin(), weights.end(), 0.0);
std::transform(weights.begin(), weights.end(), [](float x)->float{return(x/tot);});
目前,匿名函数看不到tot,因此无法编译。使局部变量对匿名函数可见的最佳方法是什么?
最佳答案
您需要关闭。
float tot = std::accumulate(weights.begin(), weights.end(), 0);
std::transform(weights.begin(), weights.end(), [tot](float x)->float{return(x/tot);});
在这种情况下,
tot
通过值捕获。 C++ 11 lambdas支持通过以下方式捕获:[x]
[&x]
[&]
[=]
您可以在逗号分隔的列表
[x, &y]
中混合以上任何内容。