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

comments powered by Disqus

Featured

  • How to Unlock Visual Studio 2022's Preview Features Like Claude Sonnet 3.7 AI Model

    Some developers complained that advanced AI models come sooner to VS Code than Visual Studio, but the new Claude Sonnet 3.7 model is now available in IDE with a paid GitHub Copilot account and a simple settings tweak in GitHub.

  • Semantic Kernel Agent Framework Graduates to Release Candidate

    With agentic AI now firmly established as a key component of modern software development, Microsoft graduated its Semantic Kernel Agent Framework to Release Candidate 1 status.

  • TypeScript 5.8 Improves Type Checking, Conditional Feature Delayed to 5.9

    Microsoft shipped TypeScript 5.8 with improved type checking in some scenarios, but thorny problems caused the dev team to delay related work to the next release.

  • Poisson Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demo of Poisson regression, where the goal is to predict a count of things arriving, such as the number of telephone calls received in a 10-minute interval at a call center. When your source data is close to mathematically Poisson distributed, Poisson regression is simple and effective.

  • Cloud-Focused .NET Aspire 9.1 Released

    Along with .NET 10 Preview 1, Microsoft released.NET Aspire 9.1, the latest update to its opinionated, cloud-ready stack for building resilient, observable, and configurable cloud-native applications with .NET.

Subscribe on YouTube

Upcoming Training Events