std::experimental::ranges::search
| Definiert in Header <experimental/ranges/algorithm> |
||
| template< ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Pred = ranges::equal_to<>, |
(1) | (Ranges TS) |
| template< ForwardRange R1, ForwardRange R2, class Pred = ranges::equal_to<>, class Proj1 = ranges::identity, class Proj2 = ranges::identity > |
(2) | (Ranges TS) |
[first2, last2) im Bereich [first1, last1). Elemente werden mittels pred verglichen, nachdem sie mit proj2 bzw. proj1 projiziert wurden.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, das auf die projizierten Elemente angewendet wird |
| proj1 | - | Projektion, die auf die Elemente im ersten Bereich angewendet wird |
| proj2 | - | Projektion, die auf die Elemente im zweiten Bereich angewendet wird |
[bearbeiten] Rückgabewert
Ein Iterator auf den Anfang des ersten Vorkommens der Sequenz [first2, last2) im Bereich [first1, last1). Wenn [first2, last2) leer ist, wird first1 zurückgegeben. Wenn kein solches Vorkommen gefunden wird, wird ein Iterator zurückgegeben, der gleich last1 ist.
[bearbeiten] Komplexität
Höchstens S * N Anwendungen des Prädikats und jeder Projektion, wobei S = last2 - first2 und N = last1 - first1.
[bearbeiten] Mögliche Implementierung
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; } } } |
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| Sucht nach dem ersten Vorkommen eines Elementbereichs (Funktionstempelat) | |
| Findet die letzte Sequenz von Elementen in einem bestimmten Bereich (Funktionsvorlage) | |
| gibt true zurück, wenn eine Menge eine Teilmenge einer anderen ist (Funktionsvorlage) | |
| Bestimmt, ob zwei Elementmengen gleich sind (Funktionsvorlage) | |
| Findet das erste Element, das bestimmte Kriterien erfüllt (Funktionsvorlage) | |
| gibt true zurück, wenn ein Bereich lexikographisch kleiner als ein anderer ist (Funktionsvorlage) | |
| Findet die erste Position, an der sich zwei Bereiche unterscheiden (Funktionsvorlage) | |
| sucht nach einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich (Funktionsvorlage) |