Jeśli chcę, aby obliczyć sumę pęczek liczb pobranych z std::istream
, mogę wykonać następujące czynności:Run dwa <algorithm> s obok siebie w tym samym przedziale iteracyjnej wejściowe
// std::istream & is = ...
int total = std::accumulate(std::istream_iterator<int>(is),
std::istream_iterator<int>(),
0);
Jednak gdybym aby obliczyć ich średnią, muszę zgromadzić dwa różne wyniki:
- suma (
std::accumulate
) - łączna liczba (
std::distance
)
Czy istnieje jakiś sposób, aby „połączyć” Te dwa algorytmy i uruchomić je „obok siebie” w jednym przejściu z zakresu iteracyjnej? Chciałbym zrobić coś takiego:
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;
Czy to możliwe?