Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

mismatch

Compara el elemento de dos intervalos para el elemento de igualdad o su equivalente en cierto modo especificado por un predicado binario y busque la primera posición donde una diferencia aparece.

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
   );

_First1

Un iterador de entrada que dirige la posición del primer elemento en el primer intervalo que se va a probar.

_Last1

Un iterador de entrada que dirige la posición una más allá del último elemento en el primer intervalo que se va a probar.

_First2

Un iterador de entrada que dirige la posición del primer elemento del segundo intervalo que se va a probar.

_Comp

Objeto definido por el usuario de la función de predicado que define la condición que se completará si fuese dos elementos a ser tomados como equivalentes. Un predicado binario acepta dos argumentos y devuelve true cuando se cumple y false cuando no se cumple.

Un par de iteradores que dirigían las posiciones de desigualdad en los dos intervalos, el primer iterador componente a la posición en el primer intervalo y el segundo iterador componente a la posición del segundo intervalo si no hay ninguna diferencia entre los elementos de los intervalos comparados o si el predicado binario en la segunda versión es cumplido por todos los pares de elementos de los dos intervalos, los primeros puntos componentes de iterador a la posición una más allá del último elemento en el primer intervalo y el segundo iterador componente para colocar uno más allá del último elemento probó en el segundo intervalo.

El intervalo que se buscará debe ser válido; todos los punteros deben ser dereferenceable y la posición última es accesible de primera por el aumento.

La complejidad del tiempo del algoritmo es lineal en el número de elementos incluidos en el intervalo.

operator== utilizado para determinar la igualdad entre los elementos debe imponer una relación de equivalencia entre sus operandos.

// 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;
}
Vector v1 = (0 5 10 15 20 25)
L1 de lista = (0 5 10 15 20 25 30 35)
Vector v2 = (0 10 20 30 40 50)
Los dos intervalos no son distintos.
L1 modificado = (0 5 100 10 15 20 25 30 35)
La primera no está entre 10 & 100
Los dos intervalos no difieren en predicado binario dos veces.

Encabezado: <algorithm>

Espacio de nombres: std

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft