search_n
Suchen nach der erste Untersequenz in einem Bereich der aus einer angegebenen Anzahl von Elementen, die einen bestimmten Wert oder eine Beziehung zu diesem Wert haben, wie durch ein binäres Prädikat angegeben.
template<class ForwardIterator1, class Diff2, class Type>
ForwardIterator1 search_n(
ForwardIterator1 _First1,
ForwardIterator1 _Last1,
Diff2 _Count,
const Type& _Val
);
template<class ForwardIterator1, class Diff2, class Type, class BinaryPredicate>
ForwardIterator1 search_n(
ForwardIterator1 _First1,
ForwardIterator1 _Last1,
Diff2 _Count,
const Type& _Val,
BinaryPredicate _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._Count
Die Größe der Untersequenz, die gesucht wird._Val
Der Wert der Elemente in der Sequenz, die gesucht wird._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.
Der Bereich, der verweist, muss gültig sein; alle Zeiger müssen dereferenzierbar sein und in der Sequenz ist die letzte Position von der ersten durch Zunahme erreichbar.
Komplexität ist in Bezug auf die Größe von gefunden linear.
Beispiel
// alg_search_n.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
// Return whether second element is 1/2 of the first
bool one_half ( int elem1, int elem2 )
{
return elem1 == 2 * elem2;
}
int main( )
{
using namespace std;
vector <int> v1, v2;
vector <int>::iterator Iter1;
int i;
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 5 * i );
}
for ( i = 0 ; i <= 2 ; i++ )
{
v1.push_back( 5 );
}
for ( i = 0 ; i <= 5 ; i++ )
{
v1.push_back( 5 * i );
}
for ( i = 0 ; i <= 2 ; i++ )
{
v1.push_back( 10 );
}
cout << "Vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
// Searching v1 for first match to (5 5 5) under identity
vector <int>::iterator result1;
result1 = search_n ( v1.begin( ), v1.end( ), 3, 5 );
if ( result1 == v1.end( ) )
cout << "There is no match for a sequence ( 5 5 5 ) in v1."
<< endl;
else
cout << "There is at least one match of a sequence ( 5 5 5 )"
<< "\n in v1 and the first one begins at "
<< "position "<< result1 - v1.begin( ) << "." << endl;
// Searching v1 for first match to (5 5 5) under one_half
vector <int>::iterator result2;
result2 = search_n (v1.begin( ), v1.end( ), 3, 5, one_half );
if ( result2 == v1.end( ) )
cout << "There is no match for a sequence ( 5 5 5 ) in v1"
<< " under the equivalence predicate one_half." << endl;
else
cout << "There is a match of a sequence ( 5 5 5 ) "
<< "under the equivalence\n predicate one_half "
<< "in v1 and the first one begins at "
<< "position "<< result2 - v1.begin( ) << "." << endl;
}
Anforderungen
Header: <algorithm>
Namespace: std