// functional_mem_fun.cpp // compile with: /EHsc #include <vector> #include <functional> #include <algorithm> #include <iostream> #include <ext/functional> using namespace std; class StoreVals { int val; public: StoreVals() { val = 0; } StoreVals(int j) { val = j; } bool display() { cout << val << " "; return true; } int squareval() { val *= val; return val; } int lessconst(int k) {val -= k; return val; } }; int main( ) { vector<StoreVals *> v1; StoreVals sv1(5); v1.push_back(&sv1); StoreVals sv2(10); v1.push_back(&sv2); StoreVals sv3(15); v1.push_back(&sv3); StoreVals sv4(20); v1.push_back(&sv4); StoreVals sv5(25); v1.push_back(&sv5); cout << "The original values stored are: " ; for_each(v1.begin(), v1.end(), mem_fun<bool, StoreVals>(&StoreVals::display)); cout << endl; // Use of mem_fun calling member function through a pointer // square each value in the vector using squareval () for_each(v1.begin(), v1.end(), mem_fun<int, StoreVals>(&StoreVals::squareval)); cout << "The squared values are: " ; for_each(v1.begin(), v1.end(), mem_fun<bool, StoreVals>(&StoreVals::display)); cout << endl; // Use of mem_fun1 calling member function through a pointer // subtract 5 from each value in the vector using lessconst () for_each(v1.begin(), v1.end(), bind2nd (__gnu_cxx::mem_fun1<int, StoreVals,int>(&StoreVals::lessconst), 5)); cout << "The squared values less 5 are: " ; for_each(v1.begin(), v1.end(), mem_fun<bool, StoreVals>(&StoreVals::display)); cout << endl; }