adjacent_find
Поиск двух соседних элементов, которые либо равны, либо удовлетворяют указанному условию.
template<class ForwardIterator> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last ); template<class ForwardIterator , class BinaryPredicate> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last, BinaryPredicate _Comp );
Параметры
_First
Прямой итератор, адресующий положение первого элемента в диапазоне для поиска._Last
Прямой итератор, адресующий положение на единицу после последнего элемента в диапазоне для поиска._Comp
Двоичный предикат, задающий условие, которому должны удовлетворять значения соседних элементов в диапазоне, по которому выполняется поиск.
Возвращаемое значение
Прямой итератор на первый элемент из пары соседних элементов, которые либо равны друг другу (в первой версии), либо удовлетворяют условию двоичного предиката (во второй версии), если такая пара элементов найдена. В противном случае возвращает итератор, указывающий на _Last.
Заметки
Алгоритм adjacent_find не изменяет последовательность. Диапазон, по которому ведется поиск, должен быть допустимым; все указатели должны поддерживать сброс ссылок должна быть возможность достижения последнего положения с первого путем приращения. Временная сложность алгоритма линейно зависит от количества элементов в диапазоне.
operator==, используемый для определения совпадения между элементами, налагает отношение эквивалентности между своими операндами..
Пример
// 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;
}
Требования
Заголовок: <algorithm>
Пространство имен: std
См. также
Ссылки
Безпредикатная версия adjacent_find