{"id":2157,"date":"2016-05-14T20:42:37","date_gmt":"2016-05-14T20:42:37","guid":{"rendered":"http:\/\/ellignostage.test\/?p=2157"},"modified":"2021-05-26T13:05:23","modified_gmt":"2021-05-26T18:05:23","slug":"fonction-lambda-un-incontournable","status":"publish","type":"post","link":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/","title":{"rendered":"Fonction Lambda, un incontournable"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>Cas utilisation de notre environnement de programmation<\/strong><\/h3>\n\n\n\n<p>Dans notre environnement de simulation nous utilisons une discr\u00e9tisation aux volumes finis, le domaine de calcul est partitionn\u00e9 en \u00e9l\u00e9ments appel\u00e9 &nbsp;\u201ccell\u201d. On r\u00e9sout les \u00e9quations sur chacune des \u201ccell\u201d. Cas unidimensionnel, \u201ccell\u201d consiste en une paire de &nbsp;\u201ccell face\u201d. Nous avons des utilitaires qui permettent de cr\u00e9er les \u201ccell\u201d \u00e0 l\u2019initialisation. Depuis quelques temps nous migrons notre code vers C++11\/14 et j\u2019ai commenc\u00e9 \u00e0 utiliser les fonctions lambda dans la proc\u00e9dure de cr\u00e9ation des \u201ccell\u201d.<\/p>\n\n\n\n<p>Je&nbsp; pr\u00e9sente 2 fa\u00e7ons de cr\u00e9er&nbsp; des paires d\u2019objets en utilisant cette nouvelle fonctionnalit\u00e9. Pour cr\u00e9er une paire d\u2019objet il existe l\u2019utilitaire \u00ab&nbsp;make_pair&nbsp;\u00bb qui retourne une paire.<\/p>\n\n\n\n<p>Quelques \u00ab\u00a0typedef\u00a0\u00bb pour rendre le code plus lisible<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n<pre><code class=\"\" data-line=\"\">   using namespace std;\n   using namespace boost;\n   using namespace std::placeholders;\n   typedef std::list&lt;cellFace&gt;::iterator list_iter;         \/\/ list iterator\n   typedef iterator_range&lt;list_iter&gt; iter_cellface;         \/\/ iterator list range\n   typedef range_iterator&lt;iter_cellface&gt;::type range_iter;  \/\/ range iterator type\n   typedef range_difference&lt;iter_cellface&gt;::type diff_type; \/\/ range difference<\/code><\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Nous d\u00e9finissons 2 sub-range dont les \u00e9l\u00e9ments sont d\u00e9cal\u00e9s l\u2019un par rapport \u00e0 l\u2019autre [begin,end[ et ]begin,end].<\/p>\n\n\n\n<p>Boost iterator_range est parfaitement adapt\u00e9 pour effectuer ce genre de tache. Dans ce cas-ci nous n\u2019avons pas besoin d\u2019un container, on veut simplement parcourir la collection. C\u2019est exactement ce que fait boost iterator range, c\u2019est une paire d\u2019iterator qui d\u00e9finit un range.<\/p>\n\n\n\n<p>Boost web site<br>\u201cThe intention of the iterator_range class is to encapsulate two iterators so they fulfill the Forward Range concept.\u201d<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n<pre><code class=\"\" data-line=\"\">  \/\/ [begin,end-1[\n  iter_cellface w_rngFace = make_iterator_range(m_listFaces).advance_end(-1);\n  \/\/ [begin+1,end[\n  iter_cellface w_rngFacep1 = make_iterator_range(m_listFaces).advance_begin(1);\n<\/code><\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Pour s&rsquo;assurer que les 2 sous range ont le meme nombre d&rsquo;elements, on peut utiliser algorithme distance de boost (librairie boost range algorithm).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n<pre><code class=\"\" data-line=\"\"> \/\/ check equality of both range size (use boost range algorithm)\n diff_type w_diff1 = distance(w_rngFace);\n diff_type w_diff2 = distance(w_rngFacep1);\n assert(w_diff1 == w_diff2);\n<\/code><\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">&nbsp;Methode 1 (fonction objet)<\/h3>\n\n\n\n<p>Pour cr\u00e9er une paire d\u2019objet il existe l\u2019utilitaire \u00ab make_pair \u00bb qui retourne une paire (std::pair).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n<pre><code class=\"\" data-line=\"\"> template &lt;typename T,typename U&gt;\n  struct pair_creator : std::binary_function&lt;T, U, std::pair&lt;T, U&gt;&gt;\n  {\n    std::pair&lt;T, U&gt; operator() ( const T&amp; arg1, const U&amp; arg2 ) const \n    {\n      return std::make_pair( arg1, arg2 );\n    }\n  };\n<\/code><\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Algorithm \u00ab\u00a0transform\u00a0\u00bb de la STL pour creer la paire a partir de nos 2 sub-range<\/p>\n\n\n\n<p>Dans les deux cas que je pr\u00e9sente, nous utilisons l\u2019algorithme \u00ab&nbsp;transform&nbsp;\u00bb de la stl. Cet algorithme vient en plusieurs version, celle que nous allons utiliser prend comme un de ces arguments une fonction binaire.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n<pre><code class=\"\" data-line=\"\">   std::transform( w_rngFace.begin(), w_rngFace.end(), \/\/ premier range \n                   w_rngFacep1.begin(),        \/\/ second range \n                   m_cellFacesPair.begin(), \/\/ store pair of faces\n                   pair_creator&lt;cellFace, cellFace&gt;()); \/\/ fonction object \n<\/code><\/pre>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">&nbsp;&nbsp;Methode 2 (fonction lambda)<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Les fonctions anonymes dites \u201clambda\u201d introduites depuis C++11 trouvent de nombreux cas d\u2019utilisation o\u00f9 l\u2019on aurait \u00e0 \u00e9crire une fonction pour r\u00e9aliser des taches simples, qui n\u00e9cessite quelques  lignes de code. Je pr\u00e9sente un exemple de l\u2019utilisation de celle-ci de notre environnement de programmation.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-2157","post","type-post","status-publish","format-standard","hentry","category-trucs-et-astuces"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fonction Lambda, un incontournable - Elligno<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fonction Lambda, un incontournable - Elligno\" \/>\n<meta property=\"og:description\" content=\"Les fonctions anonymes dites \u201clambda\u201d introduites depuis C++11 trouvent de nombreux cas d\u2019utilisation o\u00f9 l\u2019on aurait \u00e0 \u00e9crire une fonction pour r\u00e9aliser des taches simples, qui n\u00e9cessite quelques lignes de code. Je pr\u00e9sente un exemple de l\u2019utilisation de celle-ci de notre environnement de programmation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/\" \/>\n<meta property=\"og:site_name\" content=\"Elligno\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-14T20:42:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-26T18:05:23+00:00\" \/>\n<meta name=\"author\" content=\"Elligno\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elligno\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/\"},\"author\":{\"name\":\"Elligno\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/person\\\/95f2e5f7a779215bc13c98f05efafc8b\"},\"headline\":\"Fonction Lambda, un incontournable\",\"datePublished\":\"2016-05-14T20:42:37+00:00\",\"dateModified\":\"2021-05-26T18:05:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/\"},\"wordCount\":339,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\"},\"articleSection\":[\"Trucs et astuces\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/\",\"name\":\"Fonction Lambda, un incontournable - Elligno\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#website\"},\"datePublished\":\"2016-05-14T20:42:37+00:00\",\"dateModified\":\"2021-05-26T18:05:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/fonction-lambda-un-incontournable\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fonction Lambda, un incontournable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\",\"name\":\"Elligno\",\"description\":\"Site dev elligno\",\"publisher\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/elligno.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\",\"name\":\"Elligno Inc\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/elligno.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/elligno.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/favicon.png\",\"width\":256,\"height\":256,\"caption\":\"Elligno Inc\"},\"image\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/person\\\/95f2e5f7a779215bc13c98f05efafc8b\",\"name\":\"Elligno\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"caption\":\"Elligno\"},\"sameAs\":[\"https:\\\/\\\/elligno.com\"],\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/author\\\/panel-65ui89\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fonction Lambda, un incontournable - Elligno","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/","og_locale":"fr_FR","og_type":"article","og_title":"Fonction Lambda, un incontournable - Elligno","og_description":"Les fonctions anonymes dites \u201clambda\u201d introduites depuis C++11 trouvent de nombreux cas d\u2019utilisation o\u00f9 l\u2019on aurait \u00e0 \u00e9crire une fonction pour r\u00e9aliser des taches simples, qui n\u00e9cessite quelques lignes de code. Je pr\u00e9sente un exemple de l\u2019utilisation de celle-ci de notre environnement de programmation.","og_url":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/","og_site_name":"Elligno","article_published_time":"2016-05-14T20:42:37+00:00","article_modified_time":"2021-05-26T18:05:23+00:00","author":"Elligno","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Elligno","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/#article","isPartOf":{"@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/"},"author":{"name":"Elligno","@id":"https:\/\/elligno.com\/fr\/#\/schema\/person\/95f2e5f7a779215bc13c98f05efafc8b"},"headline":"Fonction Lambda, un incontournable","datePublished":"2016-05-14T20:42:37+00:00","dateModified":"2021-05-26T18:05:23+00:00","mainEntityOfPage":{"@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/"},"wordCount":339,"commentCount":0,"publisher":{"@id":"https:\/\/elligno.com\/fr\/#organization"},"articleSection":["Trucs et astuces"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/","url":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/","name":"Fonction Lambda, un incontournable - Elligno","isPartOf":{"@id":"https:\/\/elligno.com\/fr\/#website"},"datePublished":"2016-05-14T20:42:37+00:00","dateModified":"2021-05-26T18:05:23+00:00","breadcrumb":{"@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/elligno.com\/fr\/fonction-lambda-un-incontournable\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elligno.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Fonction Lambda, un incontournable"}]},{"@type":"WebSite","@id":"https:\/\/elligno.com\/fr\/#website","url":"https:\/\/elligno.com\/fr\/","name":"Elligno","description":"Site dev elligno","publisher":{"@id":"https:\/\/elligno.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elligno.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/elligno.com\/fr\/#organization","name":"Elligno Inc","url":"https:\/\/elligno.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/elligno.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/elligno.com\/wp-content\/uploads\/2021\/06\/favicon.png","contentUrl":"https:\/\/elligno.com\/wp-content\/uploads\/2021\/06\/favicon.png","width":256,"height":256,"caption":"Elligno Inc"},"image":{"@id":"https:\/\/elligno.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/elligno.com\/fr\/#\/schema\/person\/95f2e5f7a779215bc13c98f05efafc8b","name":"Elligno","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","caption":"Elligno"},"sameAs":["https:\/\/elligno.com"],"url":"https:\/\/elligno.com\/fr\/author\/panel-65ui89\/"}]}},"_links":{"self":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts\/2157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/comments?post=2157"}],"version-history":[{"count":0,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts\/2157\/revisions"}],"wp:attachment":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/media?parent=2157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/categories?post=2157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/tags?post=2157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}