我正在对 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]
  • 通过引用[&]
  • 当前作用域内的任何变量
  • 与3相同,但按值[=]

  • 您可以在逗号分隔的列表[x, &y]中混合以上任何内容。

    10-08 19:07