#include <iostream>
#include <vector>
#include <numeric> // std::accumulate
#include <functional> // std::multiplies
std::vector<int> products_n_consecutive_items(
const std::vector<int>& vec,
std::size_t n_consecutive_items)
{
std::vector<int> result;
if (n_consecutive_items == 0 || vec.size() < n_consecutive_items)
return result;
const std::size_t out_size = vec.size() - n_consecutive_items + 1;
result.reserve(out_size);
for (std::size_t i = 0; i < out_size; i++) {
int prod = std::accumulate(
vec.begin() + i,
vec.begin() + i + n_consecutive_items,
1,
std::multiplies<int>()
);
result.push_back(prod);
/*
* n_consecutive_items = 3:
* 2 * 3 * 4 = 24
* 3 * 4 * 5 = 60
* 4 * 5 * 6 = 120
* 5 * 6 * 7 = 210
* 6 * 7 * 8 = 336
* 7 * 8 * 9 = 504
* 8 * 9 * 10 = 720
*/
}
return result;
}
int main() {
std::vector<int> vec = {2, 3, 4, 5, 6, 7, 8, 9, 10};
std::size_t n_consecutive_items = 3;
auto products = products_n_consecutive_items(vec, n_consecutive_items);
std::cout << "[";
for (std::size_t i = 0; i < products.size(); i++) {
std::cout << products[i];
if (i + 1 < products.size()) std::cout << ", ";
}
std::cout << "]\n";
return 0;
}
/*
run:
[24, 60, 120, 210, 336, 504, 720]
*/