std::experimental::ranges::mismatch
| Definiert in Header <experimental/ranges/algorithm> |
||
| template< InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2, class Proj1 = ranges::identity, class Proj2 = ranges::identity, |
(1) | (Ranges TS) |
| template< InputRange R1, InputRange R2, class Proj1 = ranges::identity, class Proj2 = ranges::identity, |
(2) | (Ranges TS) |
| template< InputIterator I1, Sentinel<I1> S1, class I2, class Präd = ranges::equal_to<>, |
(3) | (Ranges TS) (veraltet) |
| template< InputRange R1, class I2, class Präd = ranges::equal_to<>, class Proj1 = ranges::identity, class Proj2 = ranges::identity > |
(4) | (Ranges TS) (veraltet) |
[first1, last1) und ein anderes definiert durch [first2, last2).Elemente werden mit pred auf die projizierten Elemente der beiden Bereiche angewendet, als ob durch ranges::invoke(pred, ranges::invoke(proj1, *i), ranges::invoke(proj2, *j)).
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 erste Bereich der Elemente |
| r1 | - | der erste Bereich der Elemente |
| first2, last2 | - | der zweite Bereich der Elemente |
| r2 | - | der zweite Bereich der Elemente |
| first2_ | - | der Anfang des zweiten Bereichs der 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 tagged_pair-Objekt mit Iteratoren zu den ersten beiden nicht übereinstimmenden Elementen (der Iterator aus dem ersten Bereich hat den Tag in1 und der Iterator aus dem zweiten Bereich hat den Tag in2).
Wenn keine Nichtübereinstimmungen gefunden werden, wenn der Vergleich last1 oder last2 erreicht, je nachdem, was zuerst eintritt, enthält das Paar den Enditerator und den entsprechenden Iterator aus dem anderen Bereich.
[bearbeiten] Komplexität
Höchstens last1 - first1 Anwendungen des Prädikats und jeder Projektion.
[bearbeiten] Mögliche Implementierung
template<InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2, class Proj1 = ranges::identity, class Proj2 = ranges::identity, class Pred = ranges::equal_to<>> requires IndirectRelation<Pred, projected<I1, Proj1>, projected<I2, Proj2>> auto mismatch(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{}) -> ranges::tagged_pair<tag::in1(I1), tag::in2(I2)> { while (first1 != last1 && first2 != last2 && ranges::invoke(pred, ranges::invoke(proj1, *first1), ranges::invoke(proj2, *first2))) { ++first1; ++first2; } return {first1, first2}; } |
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| Findet die erste Position, an der sich zwei Bereiche unterscheiden (Funktionstempelat) | |
| 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) | |
| sucht nach einem Bereich von Elementen (Funktionsvorlage) |