codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
// Implementing accumulate with for_each // See: http://stackoverflow.com/questions/3906796/how-to-fold-stl-container // Arun Saha, 2010-Oct-11 #include <numeric> #include <iostream> #include <algorithm> #include <cassert> using namespace std; 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_; }; int myfunction (int x, int y) { return x + 2 * y; } struct myclass { int operator()(int x, int y) const { return x + 3 * y; } } myobject; int main() { const int init = 100; const int numbers[] = { 10, 20, 30 }; const int accum_sum = std::accumulate( numbers, numbers + 3, init ); cout << accum_sum << endl; const result_functor for_sum = for_each( numbers, numbers + 3, result_functor( init, +1 ) ); cout << for_sum.result_ << endl; assert( accum_sum == for_sum.result_ ); const int accum_minus = std::accumulate( numbers, numbers + 3, init, minus<int>() ); cout << accum_minus << endl; const result_functor for_minus = for_each( numbers, numbers + 3, result_functor( init, -1 ) ); cout << for_minus.result_ << endl; assert( accum_minus == for_minus.result_ ); const int myfunction_result = std::accumulate( numbers, numbers + 3, init, myfunction ); cout << myfunction_result << endl; const result_functor for_myfunction = for_each( numbers, numbers + 3, result_functor( init, +2 ) ); cout << for_myfunction.result_ << endl; assert( myfunction_result == for_myfunction.result_ ); const int myobject_result = std::accumulate( numbers, numbers + 3, init, myobject ); cout << myobject_result << endl; const result_functor for_myobject = for_each( numbers, numbers + 3, result_functor( init, +3 ) ); cout << for_myobject.result_ << endl; assert( myobject_result == for_myobject.result_ ); }
Private
[
?
]
Run code
Submit