Time and Numeric Utilities
Accumulate Average
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
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;
}
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
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
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