Freigeben über


mismatch

Vergleicht das Element mit zwei Bereichen durch Element entweder für die Gleichheit oder Entsprechung auf eine Weise, die durch ein binäres Prädikat angegeben werden und sucht 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äres Prädikat verwendet zwei Argumente und gibt zurück, wenn true erfüllt und false, wenn nicht erfüllt wird.

Rückgabewert

Ein Paar Iteratoren, die die Positionen des Konflikts in den beiden Bereichen, des ersten Teiliterators zur Position im ersten Bereich und des zweiten Teiliterators zur Position im zweiten Bereich behandeln, wenn es keinen Unterschied zwischen den Elementen in den verglichenen Bereichen gibt, oder wenn das binäre Prädikat in der zweiten Version erfüllt wird von allen Elementpaaren aus den zwei Bereichen, dann von den ersten Teiliteratorpunkten zur Position eine hinter dem letzten Element im ersten Bereich und im zweiten Teiliterator, ein hinter dem letzten Element zu positionieren getestet im zweiten Bereich.

Hinweise

Der zu durchsuchenden Bereich muss gültig sein; alle Zeiger müssen dereferenzierbar sein und die letzte Position ist von der ersten durch 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