adjacent_find
Wyszukuje dwóch sąsiadujących elementów, które są równe lub spełniają określony warunek.
template<class ForwardIterator>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last
);
template<class ForwardIterator , class BinaryPredicate>
ForwardIterator adjacent_find(
ForwardIterator _First,
ForwardIterator _Last,
BinaryPredicate _Comp
);
Parametry
_First
Iteratora przodu adresowania pozycja pierwszego elementu w zakresie mają być przeszukiwane._Last
Iteratora przodu adresowania położenie jednego elementu końcowego w przeszłości w zakresie mają być przeszukiwane._Comp
Predykatu dwuelementowego podając muszą być spełnione przez wartości sąsiadujących elementów w zakresie przeszukiwanych warunek.
Wartość zwracana
Do przodu iteratora pierwszy element pary sąsiednich są wzajemnie równe (w pierwszej wersji) lub spełniających warunek przez predykatu dwuelementowego (w drugiej wersji), pod warunkiem że jest para elementów.W przeciwnym razie iterację, wskazując _Last jest zwracany.
Uwagi
adjacent_find Algorytm jest algorytm nonmutating sekwencji.Zakres przeszukiwanych musi być ważny; wszystkie wskaźniki muszą być dereferenceable i ostatniej pozycji jest dostępny z pierwszym przez incrementation.Złożoność czasu algorytm jest liniowa w liczbie elementów zawartych w zakresie.
operator== Używana do określenia dopasowania między elementami należy nałożyć relacji równoważności między argumentów.
Przykład
// 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;
}
Wymagania
Nagłówek: <algorithm>
Obszar nazw: std
Zobacz też
Informacje
Nonpredicate Version of adjacent_find