Namespaces
Variants

std::experimental::ranges:: find_end

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 Proj = ranges:: identity ,
IndirectRelation < I2, projected < I1, Proj >> Pred = ranges:: equal_to <> >
I1 find_end ( I1 first1, S1 last1, I2 first2, S2 last2,

Pred pred = Pred { } , Proj proj = Proj { } ) ;
(1) (ranges TS)
template < ForwardRange R1, ForwardRange R2, class Proj = ranges:: identity ,

IndirectRelation < ranges:: iterator_t < R2 > ,
projected < ranges:: iterator_t < R1 > , Proj >> Pred = ranges:: equal_to <> >
ranges:: safe_iterator_t < R1 > find_end ( Rng1 && rng1, Rng2 && rng2,

Pred pred = Pred { } , Proj proj = Proj { } ) ;
(2) (ranges TS)
1) Recherche la dernière occurrence de la séquence [ first2 , last2 ) dans la plage [ first1 , last1 ) (après projection avec proj ).
2) Identique à (1) , mais utilise r1 comme première plage source et r2 comme deuxième 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 pour comparer les éléments
proj - projection à appliquer aux éléments de la première plage

Valeur de retour

Itérateur vers le début de la dernière occurrence de la séquence [ first2 , last2 ) dans la plage [ first1 , last1 ) (après projection avec proj ).

Si [ first2 , last2 ) est vide ou si aucune telle séquence n'est trouvée, un itérateur qui compare égal à last1 est retourné.

Complexité

Au plus S * (N - S + 1) applications du prédicat et de la projection, où S = last2 - first2 et N = last1 - first1 .

Notes

La projection n'est appliquée qu'à la plage [ first1 , last1 ) .

Implémentation possible

template<ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,
         class Proj = ranges::identity,
         IndirectRelation<I2, projected<I1, Proj>> Pred = ranges::equal_to<>>
I1 find_end(I1 first1, S1 last1, I2 first2, S2 last2,
            Pred pred = Pred{}, Proj proj = Proj{})
{
    I1 result = ranges::next(first1, last1);
    if (first2 == last2)
        return result;
    while (true)
    {
        I1 new_result = ranges::search(first1, last1, first2, last2, pred, proj);
        if (new_result == last1)
            break;
        else
        {
            result = new_result;
            first1 = result;
            ++first1;
        }
    }
    return result;
}

Exemple

Voir aussi

trouve la dernière séquence d'éléments dans une certaine plage
(modèle de fonction)
recherche une plage d'éléments
(modèle de fonction)
retourne true si un ensemble est un sous-ensemble d'un autre
(modèle de fonction)
trouve les deux premiers éléments adjacents qui sont égaux (ou satisfont un prédicat donné)
(modèle de fonction)
trouve le premier élément satisfaisant des critères spécifiques
(modèle de fonction)
recherche l'un quelconque d'un ensemble d'éléments
(modèle de fonction)
recherche un nombre de copies consécutives d'un élément dans une plage
(modèle de fonction)