diff --git a/cpp_basics_for_STL.typ b/cpp_basics_for_STL.typ index 959536b7ed9c4cb94ebfb9218c4c9645d3be005b..6e326720b11de9e1f75abd856c0cc8447eec2137 100644 --- a/cpp_basics_for_STL.typ +++ b/cpp_basics_for_STL.typ @@ -220,7 +220,63 @@ delete[] ptr; ``` ] -#new-section-slide("Closures") +#new-section-slide("Lambda & captures") + +#slide( + title: "Les fonctions anonymes", +)[ +De plus en plus de langages proposent un mechanisme pour écrire des fonctions +anonymes, aussi appelées expressions lambda. + +Depuis C++ 11, il existe un moyen d'écrire des fonctions lambda. La syntaxe +simplifiée d'une lambda en C++ est la suivante : ```cpp +[captures](paramètres){corps de la fonction} +``` + +Si je veux par exemple définir une fonction qui multiplie un entier par 2, je +peux écrire : ```cpp +auto times_two = [](int i){return 2*i;}; +int x = times_two(3); // x vaut 6 +``` +] + +#slide( + title: "Les captures", +)[ +Les expressions lambda en C++ peuvent capturer leur environnement. + +Si je souhaite par exemple ajouter une constante à en entier, je peux écrire : + +```cpp +int cst = 5; +auto add_cst = [cst](int i){ return i+cst;}; +int x = add_cst(10); // x vaut 15 +``` +] + +#slide(title: "Les types de captures")[ +Il existe deux moyens de capturer une variable : + +#box(columns(2, gutter: 22pt)[ +== Par copie +```cpp +int var = 5; +auto add_cst = [v=var](int i) + { return i+v; }; +var = 2; +int x = add_cst(10); // x vaut 15 +``` +#colbreak() +== Par référence +```cpp +int var = 5; +auto add_cst = [v=&var](int i) + { return i+v;}; +var = 2; +int x = add_cst(10); // x vaut 12 +``` +]) +] #new-section-slide("Algorithmes STL") diff --git a/intro.typ b/intro.typ index 9c7174388a4b7750f15edf03a7a472a9972c7b2d..ecab40a76269fb03bb3e55d7245bc38f3a9583e3 100644 --- a/intro.typ +++ b/intro.typ @@ -44,7 +44,7 @@ + La gestion de la mémoire en GPGPU #pause + Les itérateurs C++ + Les vecteurs, les tableaux et les spans - + Les captures + + Les lambda & captures + Les algorithmes de la Standard Template Library (STL) #pause + Présentation du kit HPC Nvidia + Le compilateur nvc++