How to multiply every N consecutive items in a vector with C++

1 Answer

0 votes
#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]

*/

 



answered Feb 1 by avibootz

Related questions

...