std::mismatch
| Definiert in Header <algorithm>
|
||
template< class InputIt1, class InputIt2 >
std::pair<InputIt1, InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2 );
|
(1) | (constexpr seit C++20) |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
std::pair<ForwardIt1, ForwardIt2>
mismatch( ExecutionPolicy&& policy,
ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2 );
|
(2) | (seit C++17) |
template< class InputIt1, class InputIt2, class BinaryPred >
std::pair<InputIt1, InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2, BinaryPred p );
|
(3) | (constexpr seit C++20) |
template< class ExecutionPolicy,
class ForwardIt1, class ForwardIt2, class BinaryPred >
std::pair<ForwardIt1, ForwardIt2>
mismatch( ExecutionPolicy&& policy,
ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, BinaryPred p );
|
(4) | (seit C++17) |
template< class InputIt1, class InputIt2 >
std::pair<InputIt1, InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2 );
|
(5) | (seit C++14) (constexpr seit C++20) |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
std::pair<ForwardIt1, ForwardIt2>
mismatch( ExecutionPolicy&& policy,
ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, ForwardIt2 last2 );
|
(6) | (seit C++17) |
template< class InputIt1, class InputIt2, class BinaryPred >
std::pair<InputIt1, InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2, BinaryPred p );
|
(7) | (seit C++14) (constexpr seit C++20) |
template< class ExecutionPolicy,
class ForwardIt1, class ForwardIt2, class BinaryPred >
std::pair<ForwardIt1, ForwardIt2>
mismatch( ExecutionPolicy&& policy,
ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, ForwardIt2 last2, BinaryPred p );
|
(8) | (seit C++17) |
Gibt ein Paar von Iteratoren zum ersten nicht übereinstimmenden Elementpaar aus [first1, last1) und einem Bereich beginnend bei first2 zurück:
- Für die Überladungen (1-4) hat der zweite Bereich
std::distance(first1, last1)Elemente. - Für die Überladungen (5-8) ist der zweite Bereich
[first2,last2).
- Wenn
std::distance(first1, last1)undstd::distance(first2, last2)unterschiedlich sind, endet der Vergleich, wennlast1oderlast2erreicht wird.
- Wenn
operator== verglichen.p verglichen.policy.true ist:
|
|
(bis C++20) |
|
|
(seit C++20) |
Parameter
| first1, last1 | - | das Paar von Iteratoren, das den ersten Bereich der zu vergleichenden Elemente definiert |
| first2, last2 | - | das Paar von Iteratoren, das den zweiten Bereich der zu vergleichenden Elemente definiert |
| policy | - | die zu verwendende Ausführungsstrategie |
| p | - | binäres Prädikat, das true zurückgibt, wenn die Elemente als gleich behandelt werden sollen. Die Signatur der Prädikatfunktion sollte wie folgt aussehen:
Die Signatur muss nicht |
| Typanforderungen | ||
-InputIt1 muss die Anforderungen von LegacyInputIterator erfüllen.
| ||
-InputIt2 muss die Anforderungen von LegacyInputIterator erfüllen.
| ||
-ForwardIt1 muss die Anforderungen von LegacyForwardIterator erfüllen.
| ||
-ForwardIt2 muss die Anforderungen von LegacyForwardIterator erfüllen.
| ||
-BinaryPred muss die Anforderungen von BinaryPredicate erfüllen.
| ||
Rückgabewert
std::pair mit Iteratoren auf die ersten zwei nicht gleichen Elemente.
Wenn last1 erreicht ist, ist der zweite Iterator im Paar der std::distance(first1, last1)-te Iterator nach first2.
Für die Überladungen (5-8), wenn last2 erreicht ist, ist der erste Iterator im Paar der std::distance(first2, last2)-te Iterator nach first1.
Komplexität
Sei N1 als std::distance(first1, last1) und N2 als std::distance(first2, last2):
operator==.p.operator==.p.Ausnahmen
Die Überladungen mit einem Template-Parameter namens ExecutionPolicy melden Fehler wie folgt:
- Wenn die Ausführung einer als Teil des Algorithmus aufgerufenen Funktion eine Ausnahme auslöst und
ExecutionPolicyeine der Standardstrategien ist, wird std::terminate aufgerufen. Für jedes andereExecutionPolicyist das Verhalten implementationsdefiniert. - Wenn der Algorithmus keinen Speicher zuweisen kann, wird std::bad_alloc ausgelöst.
Mögliche Implementierung
| mismatch (1) |
|---|
template<class InputIt1, class InputIt2>
std::pair<InputIt1, InputIt2>
mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2)
{
while (first1 != last1 && *first1 == *first2)
++first1, ++first2;
return std::make_pair(first1, first2);
}
|
| mismatch (3) |
template<class InputIt1, class InputIt2, class BinaryPred>
std::pair<InputIt1, InputIt2>
mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPred p)
{
while (first1 != last1 && p(*first1, *first2))
++first1, ++first2;
return std::make_pair(first1, first2);
}
|
| mismatch (5) |
template<class InputIt1, class InputIt2>
std::pair<InputIt1, InputIt2>
mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
{
while (first1 != last1 && first2 != last2 && *first1 == *first2)
++first1, ++first2;
return std::make_pair(first1, first2);
}
|
| mismatch (7) |
template<class InputIt1, class InputIt2, class BinaryPred>
std::pair<InputIt1, InputIt2>
mismatch(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2, BinaryPred p)
{
while (first1 != last1 && first2 != last2 && p(*first1, *first2))
++first1, ++first2;
return std::make_pair(first1, first2);
}
|
Beispiel
Dieses Programm bestimmt die längste Teilzeichenkette, die gleichzeitig am Anfang der gegebenen Zeichenkette und am Ende derselben, in umgekehrter Reihenfolge (möglicherweise überlappend), gefunden wird.
#include <algorithm>
#include <iostream>
#include <string>
std::string mirror_ends(const std::string& in)
{
return std::string(in.begin(),
std::mismatch(in.begin(), in.end(), in.rbegin()).first);
}
int main()
{
std::cout << mirror_ends("abXYZba") << '\n'
<< mirror_ends("abca") << '\n'
<< mirror_ends("aba") << '\n';
}
Ausgabe:
ab
a
aba
Siehe auch
| bestimmt, ob zwei Mengen von Elementen gleich sind (Funktionstemplate & Algorithmus-Funktionsobjekt) | |
(C++20) |
|
(C++11) |
findet das erste Element, das bestimmte Kriterien erfüllt (Funktionstemplate & Algorithmus-Funktionsobjekt) |
(C++20)(C++20)(C++20) |
|
| vergleicht zwei Bereiche lexikografisch (Funktionstemplate & Algorithmus-Funktionsobjekt) | |
| sucht nach dem ersten Vorkommen eines Bereichs von Elementen (Funktionstemplate & Algorithmus-Funktionsobjekt) | |
(C++20) |
|
(C++20) |
findet die erste Position, an der sich zwei Bereiche unterscheiden (Algorithmus-Funktionsobjekt) |