0% found this document useful (0 votes)
13 views9 pages

Modern C Overview Part Two Solutions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views9 pages

Modern C Overview Part Two Solutions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Modern C++ Overview

Part Two Solutions

Copyright © James Raynard 2023


Lambda Expression
• Briefly describe what is meant by a lambda expression
• A lambda expression is an anonymous, inline function. It is used to create a
local function, mainly for passing as an argument to a function call or as a
return value

Copyright © James Raynard 2023


Defining a lambda expression
• Briefly describe the syntax for writing a lambda expression
• We put [] for the function name
• The arguments are written in the usual way
• The body is written in the usual way, as an inline function
• The compiler will deduce the return type (except in C++11, if the function
body returns a value and contains more than one statement)
• Write down a lambda expression that takes an int argument and
returns double the value of the argument
[] (int arg) { return 2 * arg; }

Copyright © James Raynard 2023


Example of lambda expression usage
• The C++ standard algorithm function count_if takes three arguments:
the begin and end of an iterator range, and a predicate function
which returns a boolean
• It calls the predicate function on every element in the iterator range
• Use count_if() to write a program which prints out the number of odd
elements in a vector of int, using a suitable lambda expression

Copyright © James Raynard 2023


Capture
• Briefly explain what is meant by "capture" in a lambda expression and
how to implement it
• A capture makes variables in the local scope available for use in the body of
the lambda expression
• This is done by writing the names of the desired variables inside the [] of the
lambda expression
• By default, variables are captured by value
• To capture a variable by reference, put a '&' in front of its name

Copyright © James Raynard 2023


Capture
• Write down lambda expressions which capture a local variable x
• By value
[x]() { /* Use copy of x */ }
• By reference
[&x]() { /* Use reference to x */ }

Copyright © James Raynard 2023


Capture all local variables
• Write down lambda expressions which capture all local variables
• By value
[=]() { /* Use copies of local variables */ }
• By reference
[&]() { /* Use references to local variables */ }

Copyright © James Raynard 2023


Capture and objects
• Write down lambda expressions which could be used in a member
function to capture the data members of the object
[this]() { /* Use references to data members */ }
[this]() { /* Use references to date variables */ }
• How does this differ from capturing local variables?
• The data members are captured through a reference to the object (by
dereferencing the "this" pointer)
• No special syntax is needed to modify the data members

Copyright © James Raynard 2023


Example of lambda expression with capture
• Alter the earlier count_if example so that it finds the number of exact
multiples of any integer (instead of the hard-coded value 2)
• The integer will be a local variable which is captured by the lambda
expression
• Write a program that uses this lambda expression to find the number
of exact multiples of 3

Copyright © James Raynard 2023

You might also like