Using Lambdas in C++: Listing 3

A Fibonacci generator functor.

// A Fibonacci generator functor
class GenerateFibonacci
  int penultimate_, last_;
  // 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

comments powered by Disqus


.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events