====Présentation====
Les algorithmes servent soit à lire / parcourir / modifier / obtenir une information d'un conteneur.
===Lecture et écriture===
''std::for_each'' (lecture) et ''std::transform'' (écriture).
std::vector vector{ 10, 20, 30, 40 };
std::vector::const_iterator it;
std::vector::iterator itc;
// Lecture / écriture
std::transform(
vector.begin(),
vector.end(),
vector.begin(),
[](int i)
{
return i + 1;
}
);
// Lecture seule
std::for_each(
vector.cbegin(),
vector.cend(),
[](int i)
{
std::cout << i << std::endl;
}
);
===mismatch===
Comparer deux classes itérables.
Ici, comparaison de deux string insensible à la casse.
#include
#include
#include
std::string un = "texte";
std::string deux = "Texte";
std::tuple retval =
std::mismatch(
un.cbegin(),
un.cend(),
deux.cbegin(),
deux.cend(),
[](char un, char deux)
{
return std::tolower(un) == std::tolower(deux);
});
if (retval == std::make_tuple(un.cend(), deux.cend()))
std::cout << "Identique" << std::endl;
else
std::cout << "Différent" << std::endl;
====Options====
===Séquentiel ou parallèle===
Via l%%'%%''include '', il est possible d'utiliser la totalité des fonctions de '''' en parallèle.
int x = 0;
int a[] = { 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2 };
std::for_each(std::execution::par, std::begin(a), std::end(a), [&x](int) {
++x; // Pas thread-safe.
});
std::cout << x << std::endl;