Freigeben über


adjacent_find

Suchen von zwei angrenzenden Elemente, die entweder gleich sind oder eine bestimmte Bedingung erfüllen.

template<class ForwardIterator>
   ForwardIterator adjacent_find(
      ForwardIterator _First, 
      ForwardIterator _Last
   );
template<class ForwardIterator , class BinaryPredicate>
   ForwardIterator adjacent_find(
      ForwardIterator _First, 
      ForwardIterator _Last, 
      BinaryPredicate _Comp
   );

Parameter

  • _First
    Ein Vorwärtsiterator, der die Position des ersten Elements im Bereich behandelt gefunden werden.

  • _Last
    Ein Vorwärtsiterator, der die Position eine hinter dem letzten Element im Bereich behandelt gefunden werden.

  • _Comp
    Das binäre Prädikat, das durch die Werte der benachbarten Elemente im Bereich erfüllt werden Bedingung gefunden wird, gibt.

Rückgabewert

Ein Vorwärtsiterator auf das erste Element der benachbarten Paaren, die entweder gleich beeinflusst werden (in der ersten Version) oder die die Bedingung erfüllen, die durch das binäre Prädikat angegeben ist (in der zweiten Version), vorausgesetzt, dass solche ein Paar von Elementen gefunden wird.Andernfalls wird ein Iterator, der zu _Last zeigt, zurückgegeben.

Hinweise

Der adjacent_find Algorithmus ist ein nonmutating Sequenzalgorithmus.Der zu durchsuchenden Bereich muss gültig sein; alle Zeiger müssen dereferenzierbar sein und die letzte Position ist von der ersten durch Zunahme erreichbar.Die Zeitkomplexität des Algorithmus ist in der Anzahl von Elementen linear, die im Bereich enthalten sind.

operator==, das verwendet wird, um die Übereinstimmung zwischen Elementen zu bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.

Beispiel

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

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Nonpredicate Version of adjacent_find

Predicate Version of adjacent_find

Standardvorlagenbibliothek