You need a closure.
float tot = std::accumulate(weights.begin(), weights.end(), 0);
std::transform(weights.begin(), weights.end(), [tot](float x)->float{return(x/tot);});
In this case tot
is captured by value. C++11 lambdas support capturing by:
- value
[x]
- reference
[&x]
- any variable currently in scope by reference
[&]
- same as 3, but by value
[=]
You can mix any of the above in a comma separated list [x, &y]
.