Partager via


search_n

Recherche le premier sous-séquence dans une plage qui d'un nombre spécifié d'éléments ayant une valeur particulière ou une relation à cette valeur comme spécifié par un attribut binaire.

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
   );

Paramètres

  • _First1
    Un itérateur vers l'avant adressant la position du premier élément dans la plage à rechercher.

  • _Last1
    Un itérateur vers l'avant adressant une position au delà de le dernier élément dans la plage à rechercher.

  • _Count
    La taille du sous-séquence recherché pour.

  • _Val
    La valeur des éléments dans la séquence est trouvée pour.

  • _Comp
    Objet défini par l'utilisateur de fonction de prédicat qui définit la condition à satisfaire si deux éléments doivent être pris comme équivalents.Un attribut binaire accepte deux arguments et retourne true si satisfaite et false une fois pas de contenu.

Valeur de retour

Un itérateur vers l'avant adressant la position du premier élément du premier sous-séquence qui correspond à la séquence spécifiée ou qui est équivalent dans une certaine mesure spécifié par un attribut binaire.

Notes

operator== utilisé pour déterminer la correspondance entre un élément et la valeur spécifiée doit appliquer une relation d'équivalence entre ses opérandes.

l'intervalle référencé doit être valide ; tous les pointeurs doivent être deréférençables et dans la séquence la dernière position est accessible dès le début par l'augmentation.

La complexité est linéaire par rapport à la taille du trouvé.

Exemple

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

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

Modèles Standard