から取得した一連の数値の合計を計算する場合std::istream
は、次のようにします。
// std::istream & is = ...
int total = std::accumulate(std::istream_iterator<int>(is),
std::istream_iterator<int>(),
0);
ただし、それらの平均を計算するには、2 つの異なる結果を累積する必要があります。
- 総額 (
std::accumulate
) - 合計数 (
std::distance
)
これら 2 つのアルゴリズムを「マージ」し、イテレータ範囲の単一パスで「並べて」実行する方法はありますか? 私は次のようなことをしたいと思います:
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;
これは可能ですか?