C++ Lambdas: capture list vs. parameter list

For example using stl algorithms:

std::vector<int> items;
int factor;
auto foundItem = std::find_if(items.begin(), items.end(), 
[&factor](int const& a) 
{ 
   return a * factor == 100; 
});

In this case you're called in the lambda for every item in the container and you return if the value multiplied by a captured factor is 100. The code doesn't make much sense, it's just to show you an example where capture and parameter lists matter.


The point is that with capture, you can keep a state (just as a hand written class with operator() ) in a function-like object. @dau_sama gives a good answer. Here is another example:

#include <iostream>
using namespace std;

int main() {

  const auto addSome = [](double some){
    return [some](double val){ return some+val; } ;
  };

  const auto addFive = addSome(5);

  std::cout << addFive(2) << std::endl;
}