Я думаю, что было бы трудно просто использовать накопление сразу для суммирования по мин пары. Возможно, вам придется сначала разделить существующий вектор, а затем преобразовать их в вектор минут, а затем использовать функцию накопления.
Итак, учитывая это, я, возможно, сделал бы это следующим образом:
std::vector<int> v{ 1,4,2,3};
std::vector<int> v2;
std::vector<int> v3;
std::vector<int> v4;
std::partition_copy(begin(v),
end(v),
back_inserter(v2),
back_inserter(v3),
[toggle = false](int) mutable { return toggle = !toggle; });
std::transform(begin(v2), end(v2), begin(v3), std::back_inserter(v4), [](auto a, auto b)
{
return std::min(a,b);
});
auto sum_of_min_in_pairs = std::accumulate(begin(v4), end(v4), 0);
Обратите внимание, что приведенный выше код будет иметь проблемы, если ваш вектор не имеет четного количества элементов. В противном случае, преобразуйте его в пару, с некоторыми значениями по умолчанию, чтобы соответствовать остатку, в зависимости от того, чего вы хотите достичь.
На веб-сайте STL cppreference.com станет вашим другом. Вокруг есть несколько книг, которые я очень рекомендую.
- Эффективный STL Скотта Мейерса
- Стандартная библиотека C ++ Николая Йосуттиса