如果我想计算从 检索到的一堆数字的总和std::istream
,我可以执行以下操作:
// 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;
这可能吗?