Académique Documents
Professionnel Documents
Culture Documents
Achref El Mouelhi
elmouelhi.achref@gmail.com
C++
Expression lambda ?
Introduite dans C++11
H I ©
EL
Créée directement dans le code
M OU
f E Linline
Facilitant l’écriture de fonction
e
r paramètre d’une autre
céehcomme
Souvent déclarA
©éthode
fonction/m
C++
Syntaxe
H I ©
EL
[ mode_capture ] (paramètres) -> type_retour
U
{
L MO
r e f E
// code de la fonction
ch
}
© A
C++
Exemple
H I ©
U EL
O
f E LM
ch r e
©A
C++
Exemple
H I ©
Explication
U EL
O
La fonction ne prend pas de paramètre.
f E LM
r e
Elle ne retourne pas de valeur : le type de valeur de retour peut être supprimé et ajouté à
ch
la compilation par le compilateur.
©A
C++
Exemple
H I ©
Explication
U EL
O
La fonction ne prend pas de paramètre.
f E LM
r e
Elle ne retourne pas de valeur : le type de valeur de retour peut être supprimé et ajouté à
ch
la compilation par le compilateur.
©A
On appelle une fonction lambda comme toute autre fonction en C++
lambda();
// affiche Hello world
C++
C++
Une expression lambda peut accepter des paramètres génériques
[C++14]
auto lambda = [](auto x, auto y)
{ return x + y; };
H I ©
U EL
O
L’appel
f E LM
auto resultat = lambda(3, 4);
ch r e
©A
cout << resultat << endl;
// affiche 7
C++
Une expression lambda peut accéder à une variable définie dans le contexte
global
H I ©
U EL
O
L’appel
f E LM
lambda();
// affiche Hello wick
ch r e
©A
C++
Une expression lambda peut accéder à une variable définie dans le contexte
global
H I ©
U EL
O
L’appel
f E LM
lambda();
// affiche Hello wick
ch r e
©A
Explication
C++
Une deuxième écriture équivalente
H I ©
U EL
L’appel
O
lambda();
f E LM
// affiche Hello wick
ch r e
©A
C++
Une deuxième écriture équivalente
H I ©
U EL
L’appel
O
lambda();
f E LM
// affiche Hello wick
ch r e
©A
Explication
C++
Pour un passage par référence
H I ©
L’appel U EL
O
lambda();
f E LM
cout << nom << endl;
// affiche Wick
ch r e
©A
C++
Pour un passage par référence
H I ©
L’appel U EL
O
lambda();
f E LM
cout << nom << endl;
// affiche Wick
ch r e
©A
Explication
C++
C++
On peut aussi spécifier un mode de capture par défaut (sans préciser de variable)
int i = 5, j = 2;
auto lambda = [&, j]()
{ i += j; };
H I ©
U EL
O
f E LM
ch r e
©A
C++
On peut aussi spécifier un mode de capture par défaut (sans préciser de variable)
int i = 5, j = 2;
auto lambda = [&, j]()
{ i += j; };
H I ©
[&, j]
U EL
O
E LM
& : le mode de capture par défaut est par référence.
f
ch r e
j : le mode de capture pour j est par valeur.
©A
C++
On peut aussi spécifier un mode de capture par défaut (sans préciser de variable)
int i = 5, j = 2;
auto lambda = [&, j]()
{ i += j; };
H I ©
[&, j]
U EL
O
E LM
& : le mode de capture par défaut est par référence.
f
ch r e
j : le mode de capture pour j est par valeur.
©A
L’appel
lambda();
cout << i << " " << j << endl;
// affiche 7 2
C++
C++
#include ©
Ac
#include <vector>
<algorithm>
C++
C++
C++
Pour vérifier si tous éléments d’un vecteur respectent une condition
H I ©
U EL
O
f E LM
ch r e
©A
C++
Pour vérifier si tous éléments d’un vecteur respectent une condition
H I ©
U EL
Pour vérifier si au moins un élément d’un vecteur respecte une condition
O
LM
auto b = any_of(vecteur.begin(), vecteur.end(), [=](int elt)
E
{ return (elt > 5); });
C++
Pour vérifier si tous éléments d’un vecteur respectent une condition
H I ©
U EL
Pour vérifier si au moins un élément d’un vecteur respecte une condition
O
LM
auto b = any_of(vecteur.begin(), vecteur.end(), [=](int elt)
E
{ return (elt > 5); });
C++
f E LM
// affiche 2 5 8 4
ch r e
©A
C++
Pour appliquer une transformation sur chaque élément du vecteur
H I ©
U EL
O
f E LM
ch r e
©A
C++
Pour appliquer une transformation sur chaque élément du vecteur
H I ©
U EL
O
transform peut aussi accepter un opérateur binaire
f E LM
vector<int> vecteur{2, 5, 8, 4};
ch
vector<int> vecteur2{1, 0, 9, 6}; r e
©A
vector<int> result{};
result.resize(vecteur.size());
C++
Remarque
Les fonctions lambda pourront aussi être remplacées par des fonctions de la
H I ©
librairie functional (plus, multiplies...) ou des functors.
U EL
O
f E LM
ch r e
©A
C++
Remarque
Les fonctions lambda pourront aussi être remplacées par des fonctions de la
H I ©
librairie functional (plus, multiplies...) ou des functors.
U EL
O
f E LM
Pour consulter la listec
r e
htoutes les autres fonctions
© A de
https://en.cppreference.com/w/cpp/utility/functional