Namespaces
Variants

std::experimental::ranges:: search

From cppreference.net
Défini dans l'en-tête <experimental/ranges/algorithm>
template < ForwardIterator I1, Sentinel < I1 > S1,

ForwardIterator I2, Sentinel < I2 > S2, class Pred = ranges:: equal_to <> ,
class Proj1 = ranges:: identity , class Proj2 = ranges:: identity >
requires IndirectlyComparable < I1, I2, Pred, Proj1, Proj2 >
I1 search ( I1 first1, S1 last1, I2 first2, S2 last2,

Pred pred = Pred { } , Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(1) (ranges TS)
template < ForwardRange R1, ForwardRange R2, class Pred = ranges:: equal_to <> ,

class Proj1 = ranges:: identity , class Proj2 = ranges:: identity >
requires IndirectlyComparable < ranges:: iterator_t < R1 > , ranges:: iterator_t < R2 > ,
Pred, Proj1, Proj2 >
ranges:: safe_iterator_t < R1 > search ( R1 && r1, R2 && r2, Pred pred = Pred { } ,

Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(2) (ranges TS)
1) Recherche la première occurrence de la séquence d'éléments [ first2 , last2 ) dans la plage [ first1 , last1 ) . Les éléments sont comparés en utilisant pred après avoir été projetés avec proj2 et proj1 , respectivement.
2) Identique à (1) , mais utilise r1 comme première plage source et r2 comme seconde plage source, comme si on utilisait ranges:: begin ( r1 ) comme first1 , ranges:: end ( r1 ) comme last1 , ranges:: begin ( r2 ) comme first2 , et ranges:: end ( r2 ) comme last2 .

Nonobstant les déclarations dépeintes ci-dessus, le nombre réel et l'ordre des paramètres de template pour les déclarations d'algorithmes ne sont pas spécifiés. Ainsi, si des arguments de template explicites sont utilisés lors de l'appel d'un algorithme, le programme est probablement non portable.

Table des matières

Paramètres

first1, last1 - la plage d'éléments à examiner
r1 - la plage d'éléments à examiner
first2, last2 - la plage d'éléments à rechercher
r2 - la plage d'éléments à rechercher
pred - prédicat à appliquer aux éléments projetés
proj1 - projection à appliquer aux éléments de la première plage
proj2 - projection à appliquer aux éléments de la deuxième plage

Valeur de retour

Un itérateur vers le début de la première occurrence de la séquence [ first2 , last2 ) dans la plage [ first1 , last1 ) . Si [ first2 , last2 ) est vide, first1 est retourné. Si aucune occurrence n'est trouvée, un itérateur égal à last1 est retourné.

Complexité

Au plus S * N applications du prédicat et de chaque projection, où S = last2 - first2 et N = last1 - first1 .

Implémentation possible

template<ForwardIterator I1, Sentinel<I1> S1,
         ForwardIterator I2, Sentinel<I2> S2, class Pred = ranges::equal_to<>,
         class Proj1 = ranges::identity, class Proj2 = ranges::identity>
    requires IndirectlyComparable<I1, I2, Pred, Proj1, Proj2>
I1 search(I1 first1, S1 last1, I2 first2, S2 last2,
          Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
{
    for (; ; ++first1)
    {
        I1 it = first1;
        for (I2 it2 = first2; ; (void)++it, (void)++it2)
        {
            if (it2 == last2)
                return first1;
            if (it == last1)
                return it;
            if (!ranges::invoke(pred, ranges::invoke(proj1, *it),
                                      ranges::invoke(proj2, *it2)))
                break;
        }
    }
}
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises `
` et ``, et les termes spécifiques au C++ doivent être préservés. Seul le texte environnant (s'il y en avait) aurait été traduit en français.

Exemple

Voir aussi

recherche la première occurrence d'une plage d'éléments
(modèle de fonction)
trouve la dernière séquence d'éléments dans une plage donnée
(modèle de fonction)
renvoie true si un ensemble est un sous-ensemble d'un autre
(modèle de fonction)
détermine si deux ensembles d'éléments sont identiques
(modèle de fonction)
trouve le premier élément satisfaisant des critères spécifiques
(modèle de fonction)
renvoie true si une plage est lexicographiquement inférieure à une autre
(modèle de fonction)
trouve la première position où deux plages diffèrent
(modèle de fonction)
recherche un nombre de copies consécutives d'un élément dans une plage
(modèle de fonction)