Fonction Lambda, un incontournable
Cas utilisation de notre environnement de programmation
Dans notre environnement de simulation nous utilisons une discrétisation aux volumes finis, le domaine de calcul est partitionné en éléments appelé “cell”. On résout les équations sur chacune des “cell”. Cas unidimensionnel, “cell” consiste en une paire de “cell face”. Nous avons des utilitaires qui permettent de créer les “cell” à l’initialisation. Depuis quelques temps nous migrons notre code vers C++11/14 et j’ai commencé à utiliser les fonctions lambda dans la procédure de création des “cell”.
Je présente 2 façons de créer des paires d’objets en utilisant cette nouvelle fonctionnalité. Pour créer une paire d’objet il existe l’utilitaire « make_pair » qui retourne une paire.
Quelques « typedef » pour rendre le code plus lisible
|
Nous définissons 2 sub-range dont les éléments sont décalés l’un par rapport à l’autre [begin,end[ et ]begin,end].
Boost iterator_range est parfaitement adapté pour effectuer ce genre de tache. Dans ce cas-ci nous n’avons pas besoin d’un container, on veut simplement parcourir la collection. C’est exactement ce que fait boost iterator range, c’est une paire d’iterator qui définit un range.
Boost web site
“The intention of the iterator_range class is to encapsulate two iterators so they fulfill the Forward Range concept.”
|
Pour s’assurer que les 2 sous range ont le meme nombre d’elements, on peut utiliser algorithme distance de boost (librairie boost range algorithm).
|
Methode 1 (fonction objet)
Pour créer une paire d’objet il existe l’utilitaire « make_pair » qui retourne une paire (std::pair).
|
Algorithm « transform » de la STL pour creer la paire a partir de nos 2 sub-range
Dans les deux cas que je présente, nous utilisons l’algorithme « transform » de la stl. Cet algorithme vient en plusieurs version, celle que nous allons utiliser prend comme un de ces arguments une fonction binaire.
|
Laisser un commentaire
Rejoindre la discussion?N’hésitez pas à contribuer !