如果我想計算一羣來自std::istream
檢索數的總和,我可以做以下並排:運行兩個<algorithm> s的同樣輸入迭代範圍
// std::istream & is = ...
int total = std::accumulate(std::istream_iterator<int>(is),
std::istream_iterator<int>(),
0);
但是,如果我想計算他們的平均,我需要積累兩種不同的結果:
- 總和(
std::accumulate
) - 的總數(
std::distance
)
有沒有什麼辦法可以「合併」這兩種算法,並在迭代器範圍的單遍中「並排」運行它們?我想做類似的事情:
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;
這可能嗎?