В C++ 17, можно использовать кратные выражения:
template<typename ...Ts>
int sum_impl(Ts&& ...a)
{
return (a + ...);
}
Если sum_impl
имел постоянное количество параметров, мы могли бы назвать его например:
std::apply(sum_impl, arr);
предположительно arr - std::array<int, N>
. Но так как это VARIADIC, он нуждается в небольшой толчок с хелперов:
using namespace std;
template <class Array, size_t... I>
int sum_impl(Array&& a, index_sequence<I...>)
{
return sum_impl(get<I>(forward<Array>(a))...);
}
template <class Array>
int sum(Array&& a)
{
return sum_impl(forward<Array>(a),
make_index_sequence<tuple_size_v<decay_t<Array>>>{});
}
Поэтому, предполагая, что эти помощники находятся на месте, код будет выглядеть примерно так:
template<typename ...Ts>
int sum_impl(Ts&& ...a)
{
return (a + ...);
}
int main()
{
array<int, 10> arr{0,1,2,3,4,5,6,7,8,9};
cout << sum(arr) << "\n";
return 0;
}
'станд :: accumulate' делает только то, что он говорит на олове, что одна из причин, чтобы использовать его в течение цикла. – chris
Для векторов: http://stackoverflow.com/questions/3221812/sum-of-elements-in-a-stdvector –