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 [email protected]

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