Using Lambdas in C++: Listing 3

A Fibonacci generator functor.

// A Fibonacci generator functor
class GenerateFibonacci
{
private:
  int penultimate_, last_;
public:
  // Function object constructor.
  // penultimate_(0) initializes a private member
  // penultimate_ with 0, last_ with 1.
  GenerateFibonacci() : penultimate_(0), last_(1) {};
 
  int operator()();
  {
    // in the Fibonacci series, every element is the sum of its two predecessors 
    int current = penultimate_ + last_;

    penultimate_ = last_;
    // current is returned, prior to be assigned to last_ for the next iteration
    return last_ = current;
  }
};

// this C-like function prints odd parameters, skips even ones.
void printIfOdd(int n)
{
  if (n%2)
    cout << n << " is odd." << endl;
}

int main()
{
  // a list of 20 integers
  list<int> l(20);

  // the standard library generate() algorithm iterates from the beginning of the list
  // to its end, initializing each position with its corresponding Fibonacci series
  // element.
  generate(begin(l), end(l), GenerateFibonacci());

  // the for_each() standard library algorithm iterates through the list, printing its
  // odd elements (1, 3, 5, 13, 21, 55, ...)
  for_each(begin(l), end(l), printIfOdd);

  return 0;
}

About the Author

Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at email@diegodagum.com.