Sdílet prostřednictvím


adjacent_find

Vyhledá dva sousedící prvky, které jsou buď 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
    Vpřed iterační adresování pozice prvním elementem v rozsahu má proběhnout.

  • _Last
    Vpřed iterační adresování pozici jednoho za poslední prvek v rozsahu má proběhnout.

  • _Comp
    Binární predikát poskytující podmínce. tím vyhovět hodnoty sousedící prvky v rozsahu být vyhledán.

Vrácená hodnota

Dopředně iterační na první element sousedícího dvojice, které jsou buď rovnající se vzájemně (v první verze) nebo které splňují podmínky uvedené v binárním predikátu (v druhém verze), za předpokladu, že je nalezena dvojici elementů.V opačném iterace tak, aby odkazovaly na _Last je vrácena.

Poznámky

adjacent_find Algoritmus je algoritmus nonmutating sekvence.Rozsah má proběhnout musí být platná. všechny ukazatele musí být dereferenceable a poslední pozice je dostupný od prvního podle incrementation.Čas složitost algoritmus je lineární v počet elementů obsažených v rozsahu.

operator== Slouží k určení nalezena shoda mezi elementy musí ukládat vztahu rovnocennosti mezí jejími 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í: < algoritmus >

Obor názvů: std

Viz také

Referenční dokumentace

Adjacent_find – verze bez predikátu

Adjacent_find – verze s predikátem

Standardní knihovna šablon