虽然std:: accumulate
似乎是最好的候选人,但我认为使用 good oldfor_each
也可以达到要求。
我从KennyTM 的答案中的链接中获取了示例,并将它们全部翻译为for_each
. 完整代码发布在 codepad,以下是一些摘录:
struct result_functor {
result_functor( int initial, int multiplier ) :
result_( initial ), multiplier_( multiplier ) {
}
int operator()( int x ) {
result_ += multiplier_ * x;
return result_;
}
int result_;
int multiplier_;
};
const int init = 100;
const int numbers[] = { 10, 20, 30 };
const int accum_sum = std::accumulate( numbers, numbers + 3, init );
const result_functor for_sum = for_each(
numbers, numbers + 3, result_functor( init, +1 ) );
assert( accum_sum == for_sum.result_ );