search
Sucht das erste Vorkommen einer Sequenz in eines Zielbereichs, dessen Elemente gleich der in einer bestimmten Sequenz von Elementen sind, und dessen Elemente auf eine Weise angegeben durch ein binäres Prädikat an Elemente in der angegebenen Sequenz 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 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 Vorwärtsiterator, der die Position des ersten Elements im Bereich behandelt gefunden werden._Last2
Ein Vorwärtsiterator, der die Position eine hinter dem letzten Element im Bereich behandelt gefunden werden._Comp
Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen. 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 Vorwärtsiterator, der die Position des ersten Elements der ersten Untersequenz anspricht, die die angegebene Reihenfolge entspricht, 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 bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.
Die Bereiche, auf die verwiesen wird, müssen gültig sein; alle Zeiger müssen dereferenzierbar befinden jeder Sequenz ist die letzte Position der ersten von Zunahme erreichbar.
Durchschnittliche Komplexität ist hinsichtlich der 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