Поделиться через


adjacent_find

Поиск 2 соседних элементов или равна или удовлетворяют указанному условию.

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
    Позиция одного итератора передний адресации, final элементом в диапазоне для поиска.

  • _Comp
    Binary предикат, задающего условия, которые удовлетворяют значений соседних элементов в диапазоне, в котором выполняется поиск.

Возвращаемое значение

Передний итератор к первому элементу смежных ключей или равные между собой (в первой версии) или, которые удовлетворяют условию, заданного предиката бинарный (во второй версии), при условии, что находится такая пара элементов.В противном случае итератор, указывающим на _Last возвращается.

Заметки

Алгоритм adjacent_find nonmutating алгоритм последовательности.Диапазон, для которого выполняется поиск должно быть допустимым; все указатели должны быть dereferenceable и последняя позиция доступен из первого инкрементацией.Сложность времени алгоритма линейной число элементов, содержащихся в диапазоне.

operator==, используемое для определения соответствия между элементами необходимо наложить equivalence связь между ее операндами.

Пример

// 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 пространство имен:

См. также

Ссылки

Nonpredicate Version of adjacent_find

Predicate Version of adjacent_find

Стандартная библиотека шаблонов