Namensräume
Varianten
Aktionen

std::experimental::ranges::find_end

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
 
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 [first2last2) im Bereich [first1last1) (nach Projektion mit proj).
2) Entspricht (1), verwendet aber r1 als ersten Quellbereich und r2 als zweiten Quellbereich, so 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ürden.

Ungeachtet der oben gezeigten Deklarationen ist die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Wenn also explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden, ist das Programm wahrscheinlich nicht portabel.

Inhalt

[bearbeiten] 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, die auf die Elemente im ersten Bereich angewendet wird

[bearbeiten] Rückgabewert

Iterator zum Anfang des letzten Vorkommens der Sequenz [first2last2) im Bereich [first1last1) (nach Projektion mit proj).

Wenn [first2last2) leer ist oder wenn keine solche Sequenz gefunden wird, wird ein Iterator zurückgegeben, der gleich last1 ist.

[bearbeiten] Komplexität

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

[bearbeiten] Hinweise

Die Projektion wird nur auf den Bereich [first1last1) angewendet.

[bearbeiten] 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;
}

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

Findet die letzte Sequenz von Elementen in einem bestimmten Bereich
(Funktionstempelat) [edit]
sucht nach einem Bereich von Elementen
(Funktionsvorlage) [bearbeiten]
gibt true zurück, wenn eine Menge eine Teilmenge einer anderen ist
(Funktionsvorlage) [bearbeiten]
Findet die ersten beiden benachbarten Elemente, die gleich sind (oder eine gegebene Bedingung erfüllen)
(Funktionsvorlage) [bearbeiten]
Findet das erste Element, das bestimmte Kriterien erfüllt
(Funktionsvorlage) [bearbeiten]
Sucht nach einem der Elemente aus einer Menge von Elementen
(Funktionsvorlage) [bearbeiten]
sucht nach einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(Funktionsvorlage) [bearbeiten]