#include #include #include #include #include #include #include "print.hpp" using namespace std; class IntSequence { private: int value; public: // constructor IntSequence (int initialValue) : value(initialValue) { } // ``function call'' int operator() () { return value++; } }; inline int square (int x) { return x * x; } int main() { list coll; list odds; int min_val = 0; int max_val = 0; cout << "Please enter minimum maximum values = "; cin >> min_val >> max_val; // ENUMERATE values from min_val to max_val generate_n (back_inserter(coll), // start max_val-min_val+1, // number of elements IntSequence(min_val)); // generates values PRINT_ELEMENTS(coll,"original sequence: "); // FILTER even elements remove_copy_if (coll.begin(), coll.end(), // source range back_inserter(odds), //destination range not1(bind2nd(modulus(),2))); PRINT_ELEMENTS(odds,"odd members: "); // MAP square odds transform (odds.begin(), odds.end(), // source range odds.begin(), // destination range square); // operation PRINT_ELEMENTS(odds,"square of odds: "); // ACCUMULATE *,1 cout << "product of square of odds: " << accumulate (odds.begin(), odds.end(), //source range 1, // initial value multiplies()) << endl; }