adjacent_find
Cerca due elementi adiacenti che sono uguali o soddisfano una condizione specificata.
template<class ForwardIterator>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last
);
template<class ForwardIterator , class BinaryPredicate>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last,
BinaryPredicate _Comp
);
Parametri
_First
Un iteratore avanti destinato alla posizione del primo elemento nell'intervallo da rilevare._Last
Un iteratore avanti destinato alla posizione una dopo l'elemento finale nell'intervallo da rilevare._Comp
Il predicato binario che fornisce la condizione soddisfatta dai valori degli elementi adiacenti nell'intervallo trovato.
Valore restituito
Un iteratore nel primo elemento della coppia adiacenti che viene loro uguale (nella prima versione) o che soddisfa la condizione fornita dal predicato binario (nella seconda versione), a condizione che tale coppia di elementi viene trovata.In caso contrario, un iteratore che punta a _Last viene restituito.
Note
l'algoritmo adjacent_find è un algoritmo nonmutating di sequenza.Intervallo da rilevare deve essere valido; tutti i puntatori devono essere dereferenceable e l'ultima posizione è raggiungibile da prima dall'aumento.La complessità di tempo dell'algoritmo è lineare il numero di elementi contenuti nell'intervallo.
operator== utilizzato per determinare la corrispondenza tra elementi necessario imporre una relazione di equivalenza fra i propri operandi.
Esempio
// 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;
}
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard
Vedere anche
Riferimenti
Nonpredicate Version of adjacent_find