adjacent_find
Buscar dos elementos adyacentes que son iguales o cumplen una condición especificada.
template<class ForwardIterator>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last
);
template<class ForwardIterator , class BinaryPredicate>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last,
BinaryPredicate _Comp
);
Parámetros
_First
Un iterador hacia delante que dirige la posición del primer elemento del intervalo que se buscará._Last
Un iterador hacia delante que dirige la posición una más allá del último elemento en el intervalo que se buscará._Comp
El predicado binario que proporciona la condición que se completará por los valores de los elementos adyacentes en el intervalo que se busca.
Valor devuelto
Un iterador en el primer elemento de pares adyacentes que son iguales entre sí (en la primera versión) o que cumplen la condición especificada por el predicado binario (en la segunda versión), siempre que un par de elementos se encuentra.si no, un iterador que señala a _Last se devuelve.
Comentarios
el algoritmo de adjacent_find es un algoritmo nonmutating de la secuencia.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 coincidencia entre los elementos debe imponer una relación de equivalencia entre sus operandos.
Ejemplo
// alg_adj_fnd.cpp
// compile with: /EHsc
#include <list>
#include <algorithm>
#include <iostream>
// Returns whether second element is twice the first
bool twice (int elem1, int elem2 )
{
return elem1 * 2 == elem2;
}
int main( )
{
using namespace std;
list <int> L;
list <int>::iterator Iter;
list <int>::iterator result1, result2;
L.push_back( 50 );
L.push_back( 40 );
L.push_back( 10 );
L.push_back( 20 );
L.push_back( 20 );
cout << "L = ( " ;
for ( Iter = L.begin( ) ; Iter != L.end( ) ; Iter++ )
cout << *Iter << " ";
cout << ")" << endl;
result1 = adjacent_find( L.begin( ), L.end( ) );
if ( result1 == L.end( ) )
cout << "There are not two adjacent elements that are equal."
<< endl;
else
cout << "There are two adjacent elements that are equal."
<< "\n They have a value of "
<< *( result1 ) << "." << endl;
result2 = adjacent_find( L.begin( ), L.end( ), twice );
if ( result2 == L.end( ) )
cout << "There are not two adjacent elements where the "
<< " second is twice the first." << endl;
else
cout << "There are two adjacent elements where "
<< "the second is twice the first."
<< "\n They have values of " << *(result2++);
cout << " & " << *result2 << "." << endl;
}
Requisitos
encabezado: <algoritmo>
espacio de nombres: std
Vea también
Referencia
Nonpredicate Version of adjacent_find