Freigeben über


find_end

 

Veröffentlicht: Juli 2016

Sucht in einem Bereich nach der letzten Untersequenz, die mit einer angegebenen Sequenz identisch ist oder die in durch ein binäres Prädikat angegebenen Sinne äquivalent ist.

Syntax

template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator1 find_end(
      ForwardIterator1 First1, 
      ForwardIterator1 Last1,
      ForwardIterator2 First2, 
      ForwardIterator2 Last2
   );
template<class ForwardIterator1, class ForwardIterator2, class Pred>
   ForwardIterator1 find_end(
      ForwardIterator1 First1, 
      ForwardIterator1 Last1,
      ForwardIterator2 First2, 
      ForwardIterator2 Last2,
      Pred Comp
   );

Parameter

  • First1
    Ein Forward-Iterator, der die Position des ersten Elements im zu durchsuchenden Bereich adressiert.

  • Last1
    Ein Forward-Iterator, der die Position hinter dem letzten Element im zu durchsuchenden Bereich adressiert.

  • First2
    Ein Forward-Iterator, der die Position des ersten Elements im zu durchsuchenden Bereich adressiert.

  • Last2
    Ein Forward-Iterator, der die Position hinter dem letzten Element im zu durchsuchenden Bereich adressiert.

  • Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die zu erfüllende Bedingung definiert, wenn zwei Elemente als gleichwertig akzeptiert werden. Ein binärer Prädikat akzeptiert zwei Argumente und gibt bei Erfüllung true zurück und false, wenn es nicht erfüllt wird.

Rückgabewert

Ein Forward-Iterator, der die Position des ersten Elements der letzten Untersequenz in [First1, Last1) adressiert, die der angegebenen Sequenz [First2, Last2) entspricht.

Hinweise

Der zur Bestimmung des Gleichheitszustands zwischen einem Element und dem angegebenen Wert verwendete operator== muss eine Äquivalenzrelation zwischen zwei Operanden vorgeben.

Die Bereiche, auf die verwiesen wird, müssen gültig sein. Alle Zeiger müssen dereferenzierbar sein und die letzte Position innerhalb der Sequenz ist von der ersten Position aus durch Zunahme erreichbar.

Beispiel

// alg_find_end.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>

// Return whether second element is twice the first
bool twice ( int elem1, int elem2 )
{
   return 2 * elem1 == elem2;
}

int main( )
{
   using namespace std;
   vector <int> v1, v2;
   list <int> L1;
   vector <int>::iterator Iter1, Iter2;
   list <int>::iterator L1_Iter, L1_inIter;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }

   int ii;
   for ( ii = 1 ; ii <= 4 ; ii++ )
   {
      L1.push_back( 5 * ii );
   }

   int iii;
   for ( iii = 2 ; iii <= 4 ; iii++ )
   {
      v2.push_back( 10 * iii );
   }

   cout << "Vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "List L1 = ( " ;
   for ( L1_Iter = L1.begin( ) ; L1_Iter!= L1.end( ) ; L1_Iter++ )
      cout << *L1_Iter << " ";
   cout << ")" << endl;

   cout << "Vector v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
      cout << ")" << endl;

   // Searching v1 for a match to L1 under identity
   vector <int>::iterator result1;
   result1 = find_end ( v1.begin( ), v1.end( ), L1.begin( ), L1.end( ) );

   if ( result1 == v1.end( ) )
      cout << "There is no match of L1 in v1."
           << endl;
   else
      cout << "There is a match of L1 in v1 that begins at "
           << "position "<< result1 - v1.begin( ) << "." << endl;

   // Searching v1 for a match to L1 under the binary predicate twice
   vector <int>::iterator result2;
   result2 = find_end ( v1.begin( ), v1.end( ), v2.begin( ), v2.end( ), twice );

   if ( result2 == v1.end( ) )
      cout << "There is no match of L1 in v1."
           << endl;
   else
      cout << "There is a sequence of elements in v1 that "
           << "are equivalent to those\n in v2 under the binary "
           << "predicate twice and that begins at position "
           << result2 - v1.begin( ) << "." << endl;
}
            Vektor v1 = ( 0 5 10 15 20 25 0 5 10 15 20 25 )
Liste L1 = ( 5 10 15 20 )
Vektor v2 = ( 20 30 40 )
Es gibt eine Übereinstimmung von L1 in v1, die an Position 7 beginnt.  Es gibt eine Sequenz von Elementen in v1, die mit denen
 in v2 unter dem binären Prädikat zweimal äquivalent sind und die an Position 8 beginnt.  

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Standard Template Library