Freigeben über


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

Siehe auch

Referenz

Standardvorlagenbibliothek