Se voglio calcolare la somma di una serie di numeri recuperati da un std::istream
, posso effettuare le seguenti operazioni:eseguire due <algorithm> s fianco a fianco sullo stesso campo di ingresso iteratore
// std::istream & is = ...
int total = std::accumulate(std::istream_iterator<int>(is),
std::istream_iterator<int>(),
0);
Tuttavia, se vuole calcolare la loro media, ho bisogno di accumulare due risultati diversi:
- la somma totale (
std::accumulate
) - il conteggio totale (
std::distance
)
C'è un modo per "unire" questi due algoritmi ed eseguirli "fianco a fianco" in una singola passata di un intervallo di iteratore? Mi piacerebbe fare qualcosa di simile:
using std::placeholders;
int total, count;
std::tie(total, count) = merge_somehow(std::istream_iterator<int>(is),
std::istream_iterator<int>(),
std::bind(std::accumulate, _1, _2, 0),
std::distance);
double average = (double)total/count;
è possibile?