std::mismatch
| 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 desajuste de elementos desde [first1, last1) y un rango que comienza desde 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).
- Si
std::distance(first1, last1)ystd::distance(first2, last2)son diferentes, la comparación se detiene cuando se alcanzalast1olast2.
- Si
operator==.p.policy.true:
|
|
(hasta C++20) |
|
|
(desde C++20) |
Parámetros
| first1, last1 | - | el par de iteradores que definen el primer rango de elementos a comparar |
| first2, last2 | - | el par de iteradores que definen el segundo rango de elementos a comparar |
| policy | - | la política de ejecución a usar |
| p | - | predicado binario que devuelve true si los elementos deben ser tratados como iguales. La firma del predicado debe ser equivalente a la siguiente:
Mientras que la firma no necesita tener |
| Requisitos de tipo | ||
-InputIt1 debe cumplir los requisitos de LegacyInputIterator.
| ||
-InputIt2 debe cumplir los requisitos de LegacyInputIterator.
| ||
-ForwardIt1 debe cumplir los requisitos de LegacyForwardIterator.
| ||
-ForwardIt2 debe cumplir los requisitos de LegacyForwardIterator.
| ||
-BinaryPred debe cumplir los requisitos de BinaryPredicate.
| ||
Valor de retorno
std::pair con iteradores a los primeros dos 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 N1 como std::distance(first1, last1) y N2 como std::distance(first2, last2):
operator==.p.operator==.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
ExecutionPolicyes una de las políticas estándar, se llama a std::terminate. Para cualquier otroExecutionPolicy, el comportamiento está definido por la implementación. - Si el algoritmo falla al asignar memoria, se lanza std::bad_alloc.
Posible implementación
| 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 comienzo de la cadena dada y al final de la misma, en orden inverso (posiblemente superponiéndose).
#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 & objeto función algoritmo) | |
(C++20) |
|
(C++11) |
encuentra el primer elemento que satisface criterios específicos (plantilla de función & objeto función algoritmo) |
(C++20)(C++20)(C++20) |
|
| compara dos rangos lexicográficamente (plantilla de función & objeto función algoritmo) | |
| busca la primera ocurrencia de un rango de elementos (plantilla de función & objeto función algoritmo) | |
(C++20) |
|
(C++20) |
encuentra la primera posición donde dos rangos difieren (objeto función algoritmo) |