Как я понял, вы хотели написать:
double N_Norm(std::vector<double> v, double n)
{
std::transform(v.begin(), v.end(), [n](double d) { std::pow(d, n); });
double sum = std::accumulate(v.begin(), v.end(), 0.);
return std::pow(sum, 1 / n);
}
Но это делает дополнительную копию вектора.
В c ++ 17 вы можете сделать:
double N_Norm(std::vector<double> v, double n)
{
return std::pow(std::transform_reduce(v.begin(),
v.end(),
0.,
std::plus<>{},
[n](double d){ return std::pow(d, n); }),
1 / n);
}