Sdílet prostřednictvím


adjacent_find

Hledá dvě sousedící prvky, které jsou rovny nebo splňují zadanou podmínku.

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
    Předávání iterační adresování pozici první prvek v rozsahu mají být prohledány.

  • _Last
    Dopředu iterační adresování pozice jeden za poslední prvek v rozsahu mají být prohledány.

  • _Comp
    Binárního predikátu uvádějící podmínky obsloužit sousedící prvky v oblasti hledané hodnoty.

Vrácená hodnota

Iterační dopředu na první prvek sousedící dvojice, které jsou buď rovnající se navzájem (v první verzi) nebo který splňovat podmínku dán binárního predikátu (v druhé verze), za předpokladu, že je nalezen dvojice prvků.Jinak iterátoru na _Last je vrácena.

Poznámky

adjacent_find Algoritmus je algoritmus nonmutating sekvence.Rozsah prohledávaných musí být platná. všechny ukazatele musí být dereferenceable a je dostupná z první poslední pozice ve incrementation.Čas složitost algoritmu je počet prvků obsažených v rozsahu lineární.

operator== Slouží k určení shoda mezi prvky musí stanovit vztah rovnocennosti mezi jeho operandy.

Příklad

// 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;
}
  
  
  
  

Požadavky

Záhlaví: <algorithm>

Obor názvů: std

Viz také

Referenční dokumentace

Nonpredicate Version of adjacent_find

Predicate Version of adjacent_find

Standardní šablona knihovny