/*
 * forEachFunctor.cpp
 *
 *  Created on: 19.09.2011
 *      Author: Rainer Grimm
 *      Book  : C++0x
 */
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>

class AddN{
public:
  AddN(int n):num(n){};
  void operator()(int& i){
    i +=num;
  }
private:
  int num;
};

int main(){
  std::cout << std::endl;

  std::vector<int> myVec2{1,2,3,4,5,6,7,8,9,10};
  AddN add4(4);
  std::for_each(myVec2.begin(),myVec2.end(),add4);
  std::cout << std::setw(20) << std::left << "myVec2: i->i+4:     ";
  for (auto v: myVec2) std::cout << std::setw(6) << std::left << v;
  std::cout << "\n";

  std::vector<int> myVec3{1,2,3,4,5,6,7,8,9,10};
  AddN addMinus5(-5);
  std::for_each(myVec3.begin(),myVec3.end(),addMinus5);
  std::cout << std::setw(20) << std::left << "myVec3: i->i-5:     ";
  for (auto v: myVec3) std::cout << std::setw(6) << std::left << v;

  std::cout << "\n\n";
}
