Yes, as usual, there is an algorithm (although this one is in <numeric>), std::accumulate( live example ):
using std::begin;
using std::end;
auto multi = std::accumulate(begin(vars), end(vars), 1, std::multiplies<double>());
std::multiplies <functional>. std::accumulate std::plus, , operator(). std::multiplies - , .
++ 14 std::multiplies<double> std::multiplies<>, operator(), . , Eric Niebler Ranges, , vars | accumulate(1, std::multiplies<>()), .