adjacent_find
Recherche deux éléments adjacents qui sont égales ou remplissent une condition spécifiée.
template<class ForwardIterator>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last
);
template<class ForwardIterator , class BinaryPredicate>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last,
BinaryPredicate _Comp
);
Paramètres
_First
Un itérateur vers l'avant adressant la position du premier élément dans la plage à rechercher._Last
Un itérateur vers l'avant adressant une position au delà de le dernier élément dans la plage à rechercher._Comp
L'attribut binaire donnant la condition à répondre par les valeurs des éléments adjacents dans la plage recherché.
Valeur de retour
Un itérateur en avant le premier élément de la paire adjacentes qui sont égales entre eux (dans la première version) ou qui remplissent la condition spécifiée par l'attribut binaire (dans la deuxième version), à condition que une telle paire d'éléments soit trouvée.Sinon, un itérateur qui pointe vers _Last est retourné.
Notes
l'algorithme d' adjacent_find est un algorithme nonmutating de séquence.l'intervalle à rechercher doit être valide ; tous les pointeurs doivent être deréférençables et la dernière position est accessible dès le début par l'augmentation.La complexité de temps de l'algorithme est linéaire du nombre d'éléments contenus dans la plage.
operator== utilisé pour déterminer la correspondance entre les éléments doit appliquer une relation d'équivalence entre ses opérandes.
Exemple
// 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;
}
Configuration requise
en-tête : <algorithm>
l'espace de noms : DST
Voir aussi
Référence
Nonpredicate Version of adjacent_find