Freigeben über


search

Sucht das erste Vorkommen einer Sequenz innerhalb eines Zielbereichs, dessen Elemente gleich der in einer angegebenen Sequenz von Elementen sind, oder dessen Elemente auf eine Weise angegeben durch ein binäres Prädikat auf Elemente in der angegebenen Reihenfolge entsprechendes sind.

template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator1 search(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2
   );
template<class ForwardIterator1, class ForwardIterator2, class Predicate>
   ForwardIterator1 search(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2
      Predicate _Comp
   );

Parameter

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

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

  • _First2
    Ein Vorwärtsiterator, der die Position des ersten Elements im Bereich behandelt verglichen werden sollen.

  • _Last2
    Ein Vorwärtsiterator, der die Position eine hinter dem letzten Element im Bereich behandelt verglichen werden sollen.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert, Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen.Ein binäres Prädikat verwendet zwei Argumente und gibt zurück, wenn true erfüllt und false, wenn nicht erfüllt wird.

Rückgabewert

Ein Vorwärtsiterator, der die Position des ersten Elements der ersten Untersequenz behandelt, die die angegebene Sequenz übereinstimmt, oder auf eine Weise angegeben durch ein binäres Prädikat entsprechendes ist.

Hinweise

operator==, das verwendet wird, um die Übereinstimmung zwischen einem Element und dem angegebenen Wert zu ermitteln, muss eine Äquivalenzrelation zwischen den Operanden verlangen.

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

Durchschnittliche Komplexität ist in Bezug auf die Größe des gefundenen Bereichs linear, und Komplexität des schlimmsten Fall ist auch in Bezug auf die Größe der Sequenz linear, die gesucht wird.

Beispiel

// alg_search.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 = 4 ; ii <= 5 ; 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 first match to L1 under identity
   vector <int>::iterator result1;
   result1 = search (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 at least one match of L1 in v1"
           << "\n and the first one begins at "
           << "position "<< result1 - v1.begin( ) << "." << endl;

   // Searching v1 for a match to L1 under the binary predicate twice
   vector <int>::iterator result2;
   result2 = search  (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\n to those in v2 under the binary "
           << "predicate twice\n and the first one begins at position "
           << result2 - v1.begin( ) << "." << endl;
}
  
  

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek