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 protected].