std::accumulate folds a sequence of numbers into one total that later calculations can reuse.

accumulate `std::accumulate` starts from an initial value and adds each item in order.
integer average Integer division keeps the whole-number part of the average.

Accumulate Average

extra
accumulate_average.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    int extra = 10;

    std::vector<int> values{8, 12, extra};
    int total = std::accumulate(values.begin(), values.end(), 0);
    int average = total / static_cast<int>(values.size());

    std::cout << "extra=" << extra << std::endl;
    std::cout << "total=" << total << std::endl;
    std::cout << "average=" << average << std::endl;
    return 0;
}
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    int extra = 0;

    std::vector<int> values{8, 12, extra};
    int total = std::accumulate(values.begin(), values.end(), 0);
    int average = total / static_cast<int>(values.size());

    std::cout << "extra=" << extra << std::endl;
    std::cout << "total=" << total << std::endl;
    std::cout << "average=" << average << std::endl;
    return 0;
}
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    int extra = 30;

    std::vector<int> values{8, 12, extra};
    int total = std::accumulate(values.begin(), values.end(), 0);
    int average = total / static_cast<int>(values.size());

    std::cout << "extra=" << extra << std::endl;
    std::cout << "total=" << total << std::endl;
    std::cout << "average=" << average << std::endl;
    return 0;
}
  1. extra ← 10, values ← [8, 12, 10], total ← 30, average ← 10

    5int main() {6    int extra→ 10 = 10; //@extra=0, 3078    std::vector<int> values→ [8, 12, 10]{8, 12, extra};9    int total→ 30 = std::accumulate(values[8, 12, 10].begin(), values.end(), 0);10    int average→ 10 = total30 / static_cast<int>(values[8, 12, 10].size());1112    std::cout << "extra=" << extra10 << std::endl;13    std::cout << "total=" << total30 << std::endl;14    std::cout << "average=" << average10 << std::endl;15    return 0;16}
    outputextra=10
    total=30
    average=10
  1. extra ← 0, values ← [8, 12, 0], total ← 20, average ← 6

    5int main() {6    int extra→ 0 = 0;78    std::vector<int> values→ [8, 12, 0]{8, 12, extra};9    int total→ 20 = std::accumulate(values[8, 12, 0].begin(), values.end(), 0);10    int average→ 6 = total20 / static_cast<int>(values[8, 12, 0].size());1112    std::cout << "extra=" << extra0 << std::endl;13    std::cout << "total=" << total20 << std::endl;14    std::cout << "average=" << average6 << std::endl;15    return 0;16}
    outputextra=0
    total=20
    average=6
  1. extra ← 30, values ← [8, 12, 30], total ← 50, average ← 16

    5int main() {6    int extra→ 30 = 30;78    std::vector<int> values→ [8, 12, 30]{8, 12, extra};9    int total→ 50 = std::accumulate(values[8, 12, 30].begin(), values.end(), 0);10    int average→ 16 = total50 / static_cast<int>(values[8, 12, 30].size());1112    std::cout << "extra=" << extra30 << std::endl;13    std::cout << "total=" << total50 << std::endl;14    std::cout << "average=" << average16 << std::endl;15    return 0;16}
    outputextra=30
    total=50
    average=16