(Optional) C++ - Lambda Expressions
Authors: Benjamin Qi, Dong Liu
Defining anonymous function objects.
Introduction
Resources | ||||
---|---|---|---|---|
CPP | reference | |||
UMich | ||||
SO | ||||
Microsoft |
Recursive Lambdas
y_combinator
With Resources | ||||
---|---|---|---|---|
open-std | ||||
RIP Tutorial |
If we add the following from the link above in C++14:
namespace std {template <class Fun> class y_combinator_result {Fun fun_;public:template <class T>explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {}template <class... Args> decltype(auto) operator()(Args &&...args) {
Then we can have code like the following:
int main() {cout << y_combinator([](auto gcd, int a, int b) -> int {return b == 0 ? a : gcd(b, a % b);})(20, 30)<< "\n"; // outputs 10}
function
With Instead of auto
, use function<return_type(param)>
.
int main() {function<int(int, int)> gcd = [&](int a, int b) {return b == 0 ? a : gcd(b, a % b);};cout << gcd(20, 30) << '\n'; // outputs 10}
Module Progress:
Join the USACO Forum!
Stuck on a problem, or don't understand a module? Join the USACO Forum and get help from other competitive programmers!