mismatch
Vergleicht das Element mit zwei Bereichen durch Element entweder für die Gleichheit oder Entsprechung auf eine Weise, die von ein binäres Prädikat angegeben werden und lokalisiert die erste Position, in der ein Unterschied auftritt.
template<class InputIterator1, class InputIterator2>
pair<InputIterator1, InputIterator2> mismatch(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2
);
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
pair<InputIterator1, InputIterator2> mismatch(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2
BinaryPredicate _Comp
);
Parameter
_First1
Ein Eingabeiterator, der die Position des ersten Elements im ersten Bereich behandelt getestet werden._Last1
Ein Eingabeiterator, der die Position eine hinter dem letzten Element im ersten Bereich behandelt getestet werden._First2
Ein Eingabeiterator, der die Position des ersten Elements im zweiten Bereich behandelt getestet werden._Comp
Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen. Ein binärer Prädikat akzeptiert zwei Argumente und gibt bei Erfüllung true zurück und false, wenn es nicht erfüllt wird.
Rückgabewert
Ein Paar Iteratoren, welche die Positionen des Konflikts in den zwei Bereichen, der erste Teiliterator zur Position im ersten Bereich und der zweite Teiliterator zur Position im zweiten Bereich behandeln, wenn es keinen Unterschied zwischen den Elementen in den verglichenen Bereichen gibt oder bei dem binären Prädikat in der zweiten Version wird erfüllt von allen Element, von den zwei Bereichen belegt, dann vom ersten Teiliterator zeigt auf der Position eine hinter dem letzten Element im ersten Bereich und im zweiten Teiliterator ein, hinter dem letzten Element positionieren, das im zweiten Bereich getestet wird.
Hinweise
Der zu durchsuchenden Bereich muss gültig sein; alle Zeiger müssen dereferenzierbar sein und die letzte Position befindet der ersten von Zunahme erreichbar.
Die Zeitkomplexität des Algorithmus ist in der Anzahl von Elementen linear, die im Bereich enthalten sind.
operator==, das verwendet wird, um die Gleichheit zwischen Elementen zu bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.
Beispiel
// alg_mismatch.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
// Return whether second element is twice the first
bool twice ( int elem1, int elem2 )
{
return elem1 * 2 == elem2;
}
int main( )
{
using namespace std;
vector <int> v1, v2;
list <int> L1;
vector <int>::iterator Iter1, Iter2;
list <int>::iterator L1_Iter, L1_inIter;
int i;
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 5 * i );
}
int ii;
for ( ii = 0 ; ii <= 7 ; ii++ )
{
L1.push_back( 5 * ii );
}
int iii;
for ( iii = 0 ; iii <= 5 ; iii++ )
{
v2.push_back( 10 * iii );
}
cout << "Vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
cout << "List L1 = ( " ;
for ( L1_Iter = L1.begin( ) ; L1_Iter!= L1.end( ) ; L1_Iter++ )
cout << *L1_Iter << " ";
cout << ")" << endl;
cout << "Vector v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
// Testing v1 and L1 for mismatch under identity
pair<vector <int>::iterator, list <int>::iterator> results1;
results1 = mismatch (v1.begin( ), v1.end( ), L1.begin( ));
if ( results1.first == v1.end( ) )
cout << "The two ranges do not differ."
<< endl;
else
cout << "The first mismatch is between "
<< *results1.first << " & " << *results1.second
<< endl;
// Modifying L1
L1_inIter = L1.begin( );
L1_inIter++;
L1_inIter++;
L1.insert(L1_inIter, 100);
cout << "Modified L1 = ( " ;
for ( L1_Iter = L1.begin( ) ; L1_Iter!= L1.end( ) ; L1_Iter++ )
cout << *L1_Iter << " ";
cout << ")" << endl;
// Testing v1 with modified L1 for mismatch under identity
results1 = mismatch ( v1.begin( ), v1.end( ), L1.begin( ) );
if ( results1.first == v1.end( ) )
cout << "The two ranges do not differ."
<< endl;
else
cout << "The first mismatch is between "
<< *results1.first << " & " << *results1.second
<< endl;
// Test v1 and v2 for mismatch under the binary predicate twice
pair<vector <int>::iterator, vector <int>::iterator> results2;
results2 = mismatch ( v1.begin( ), v1.end( ), v2.begin( ), twice );
if ( results2.first == v1.end( ) )
cout << "The two ranges do not differ under the binary "
<< "predicate twice." << endl;
else
cout << "The first mismatch is between "
<< *results2.first << " & " << *results2.second
<< endl;
}
Anforderungen
Header: <algorithm>
Namespace: std