Namespaces
Variants

std:: mismatch

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
(C++11) (C++11) (C++11)
mismatch

Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Definido en el encabezado <algorithm>
template < class InputIt1, class InputIt2 >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2 ) ;
(1) (constexpr desde C++20)
template < class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

std:: pair < ForwardIt1, ForwardIt2 >
mismatch ( ExecutionPolicy && policy,
ForwardIt1 first1, ForwardIt1 last1,

ForwardIt2 first2 ) ;
(2) (desde C++17)
template < class InputIt1, class InputIt2, class BinaryPred >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2, BinaryPred p ) ;
(3) (constexpr desde 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) (desde C++17)
template < class InputIt1, class InputIt2 >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2, InputIt2 last2 ) ;
(5) (desde C++14)
(constexpr desde 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) (desde 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) (desde C++14)
(constexpr desde 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) (desde C++17)

Devuelve un par de iteradores al primer elemento que no coincide entre [ first1 , last1 ) y un rango que comienza en first2 :

  • Para las sobrecargas (1-4) , el segundo rango tiene std:: distance ( first1, last1 ) elementos.
  • Para las sobrecargas (5-8) , el segundo rango es [ first2 , last2 ) .
1,5) Los elementos se comparan utilizando operator == .
3,7) Los elementos se comparan utilizando el predicado binario dado p .
2,4,6,8) Igual que (1,3,5,7) , pero ejecutado según la policy .
Estas sobrecargas participan en la resolución de sobrecarga solo si se cumplen todas las siguientes condiciones:

std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> es true .

(hasta C++20)

std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> es true .

(desde C++20)

Contenidos

Parámetros

first1, last1 - el par de iteradores que define el primer rango de elementos a comparar
first2, last2 - el par de iteradores que define el segundo rango de elementos a comparar
policy - la política de ejecución a utilizar
p - predicado binario que retorna ​ true si los elementos deben tratarse como iguales.

La firma de la función predicado debe ser equivalente a lo siguiente:

bool pred ( const Type1 & a, const Type2 & b ) ;

Aunque la firma no necesita tener const & , la función no debe modificar los objetos pasados y debe poder aceptar todos los valores de tipo (posiblemente const) Type1 y Type2 independientemente de la categoría de valor (por lo tanto, Type1 & no está permitido , ni tampoco Type1 a menos que para Type1 un movimiento sea equivalente a una copia (desde C++11) ).
Los tipos Type1 y Type2 deben ser tales que objetos de tipos InputIt1 y InputIt2 puedan ser desreferenciados y luego convertidos implícitamente a Type1 y Type2 respectivamente. ​

Requisitos de tipo
-
InputIt1 debe cumplir con los requisitos de LegacyInputIterator .
-
InputIt2 debe cumplir con los requisitos de LegacyInputIterator .
-
ForwardIt1 debe cumplir con los requisitos de LegacyForwardIterator .
-
ForwardIt2 debe cumplir con los requisitos de LegacyForwardIterator .
-
BinaryPred debe cumplir con los requisitos de BinaryPredicate .

Valor de retorno

std::pair con iteradores a los dos primeros elementos no iguales.

Si se alcanza last1 , el segundo iterador en el par es el std:: distance ( first1, last1 ) ésimo iterador después de first2 .

Para las sobrecargas (5-8) , si se alcanza last2 , el primer iterador en el par es el std:: distance ( first2, last2 ) ésimo iterador después de first1 .

Complejidad

Dado N 1 como std:: distance ( first1, last1 ) y N 2 como std:: distance ( first2, last2 ) :

1,2) Como máximo N 1 comparaciones utilizando operator == .
3,4) Como máximo N 1 aplicaciones del predicado p .
5,6) Como máximo min(N 1 ,N 2 ) comparaciones utilizando operator == .
7,8) Como máximo min(N 1 ,N 2 ) aplicaciones del predicado p .

Excepciones

Las sobrecargas con un parámetro de plantilla llamado ExecutionPolicy reportan errores de la siguiente manera:

  • Si la ejecución de una función invocada como parte del algoritmo lanza una excepción y ExecutionPolicy es uno de los standard policies , std::terminate es llamado. Para cualquier otro ExecutionPolicy , el comportamiento está definido por la implementación.
  • Si el algoritmo falla al asignar memoria, std::bad_alloc es lanzado.

Implementación posible

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

Ejemplo

Este programa determina la subcadena más larga que se encuentra simultáneamente al principio de la cadena dada y al final de ella, en orden inverso (posiblemente superpuesta).

#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';
}

Salida:

ab
a
aba

Véase también

determina si dos conjuntos de elementos son iguales
(plantilla de función)
encuentra el primer elemento que cumple criterios específicos
(plantilla de función)
devuelve true si un rango es lexicográficamente menor que otro
(plantilla de función)
busca la primera ocurrencia de un rango de elementos
(plantilla de función)
encuentra la primera posición donde dos rangos difieren
(objeto función de algoritmo)