std::experimental::ranges::find_end
| Definiert in Header <experimental/ranges/algorithm> |
||
| template< ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Proj = ranges::identity, |
(1) | (Ranges TS) |
| template< ForwardRange R1, ForwardRange R2, class Proj = ranges::identity, IndirectRelation<ranges::iterator_t<R2>, |
(2) | (Ranges TS) |
[first2, last2) im Bereich [first1, last1) (nach Projektion mit proj).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 [first2, last2) im Bereich [first1, last1) (nach Projektion mit proj).
Wenn [first2, last2) 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 [first1, last1) 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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| Findet die letzte Sequenz von Elementen in einem bestimmten Bereich (Funktionstempelat) | |
| sucht nach einem Bereich von Elementen (Funktionsvorlage) | |
| gibt true zurück, wenn eine Menge eine Teilmenge einer anderen ist (Funktionsvorlage) | |
| Findet die ersten beiden benachbarten Elemente, die gleich sind (oder eine gegebene Bedingung erfüllen) (Funktionsvorlage) | |
| Findet das erste Element, das bestimmte Kriterien erfüllt (Funktionsvorlage) | |
| Sucht nach einem der Elemente aus einer Menge von Elementen (Funktionsvorlage) | |
| sucht nach einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich (Funktionsvorlage) |