Namespaces
Variants

std::experimental::ranges:: find_end

From de.cppreference.net
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) Sucht nach dem letzten Vorkommen der Sequenz [ first2 , last2 ) im Bereich [ first1 , last1 ) (nach Projektion mit proj ).
2) Gleich wie (1) , verwendet jedoch r1 als ersten Quellbereich und r2 als zweiten Quellbereich, als ob ranges:: begin ( r1 ) als first1 , ranges:: end ( r1 ) als last1 , ranges:: begin ( r2 ) als first2 und ranges:: end ( r2 ) als last2 verwendet würde.

Ungeachtet der oben dargestellten Deklarationen sind die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Daher ist ein Programm wahrscheinlich nicht portabel, wenn explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden.

Inhalt

Parameter

first1, last1 - der Bereich der zu untersuchenden Elemente
r1 - der Bereich der zu untersuchenden Elemente
first2, last2 - der Bereich der zu durchsuchenden Elemente
r2 - der Bereich der zu durchsuchenden Elemente
pred - Prädikat zum Vergleichen der Elemente
proj - Projektion zur Anwendung auf die Elemente im ersten Bereich

Rückgabewert

Iterator zum Anfang des letzten Vorkommens der Sequenz [ first2 , last2 ) im Bereich [ first1 , last1 ) (nach Projektion mit proj ).

Falls [ first2 , last2 ) leer ist oder keine solche Sequenz gefunden wird, wird ein Iterator zurückgegeben, der gleich last1 ist.

Komplexität

Höchstens S * (N - S + 1) Anwendungen des Prädikats und der Projektion, wobei S = last2 - first2 und N = last1 - first1 .

Hinweise

Die Projektion wird nur auf den Bereich [ first1 , last1 ) angewendet.

Mögliche Implementierung

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;
}

Beispiel

Siehe auch

findet die letzte Folge von Elementen in einem bestimmten Bereich
(Funktionsschablone & Algorithmus-Funktionsobjekt)
sucht nach einem Bereich von Elementen
(Funktionsschablone)
gibt true zurück, wenn eine Menge eine Teilmenge einer anderen ist
(Funktionsschablone)
findet die ersten zwei benachbarten Elemente, die gleich sind (oder ein gegebenes Prädikat erfüllen)
(Funktionsschablone)
findet das erste Element, das bestimmte Kriterien erfüllt
(Funktionsschablone)
sucht nach einem beliebigen Element aus einer Menge von Elementen
(Funktionsschablone)
sucht nach einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(Funktionsschablone)