Condividi tramite


adjacent_find

Cerca due elementi adiacenti uguali o che 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
    Iteratore in avanti che punta alla posizione del primo elemento nell'intervallo in cui eseguire la ricerca.

  • _Last
    Iteratore in avanti che punta alla posizione immediatamente successiva all'ultimo elemento nell'intervallo in cui eseguire la ricerca.

  • _Comp
    Predicato binario che fornisce la condizione che deve essere soddisfatta dai valori degli elementi adiacenti nell'intervallo in cui eseguire la ricerca.

Valore restituito

Iteratore in avanti al primo elemento della coppia adiacente con elementi uguali (nella prima versione) o che soddisfano la condizione fornita dal predicato binario (nella seconda versione), sempre che tale coppia di elementi venga trovata. In caso contrario, viene restituito un iteratore che punta a _Last.

Note

L'algoritmo adjacent_find è un algoritmo di sequenza non modificabile. L'intervallo in cui eseguire la ricerca deve essere valido. Tutti i puntatori devono essere dereferenziabili e l'ultima posizione deve essere raggiungibile dalla prima per incremento. La complessità di tempo dell'algoritmo è lineare nel numero di elementi contenuti nell'intervallo.

L'operatore operator== usato per determinare la corrispondenza tra elementi deve imporre una relazione di equivalenza tra gli 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: std

Vedere anche

Riferimenti

Versione senza predicato di adjacent_find

Versione con predicato di adjacent_find

Libreria di modelli standard