Partager via


stable_partition

Classe les éléments d'une plage dans deux disjointes les packages, avec ces éléments satisfaisant attribut unaire qui précèdent ceux qui ne respecte pas le, en conservant l'ordre relatif des éléments équivalents.

template<class BidirectionalIterator, class Predicate> 
   BidirectionalIterator stable_partition( 
      BidirectionalIterator _First,  
      BidirectionalIterator _Last, 
      Predicate _Pred 
   );

Paramètres

  • _First
    Un itérateur bidirectionnel qui adresse la position du premier élément dans la plage à partitioner.

  • _Last
    Un itérateur bidirectionnel qui adresse la position juste après l'élément final dans la plage à partitionner.

  • _Pred
    Fonction d'attribut définie par l'utilisateur qui définit la condition à satisfaire si un élément doit être classé. Un attribut prend un seul argument et retourne true ou false.

Valeur de retour

Un itérateur bidirectionnelle qui adresse la position du premier élément dans la plage qui ne remplit pas la condition d'attribut.

Notes

La plage référencée doit être valide ; tous les pointeurs doivent être deréférençables et, dans la séquence, la dernière position doit être accessible à partir de la première par incrémentation.

Les éléments a et b sont équivalents, mais pas nécessairement égaux, si les deux Pr (a, *b)*sont faux et Pr (b, a si false, où Pr est le prédicat de paramètres spécifié. L'algorithme de stable_ partition est stable et garantit que l'ordre relatif des équivalents éléments est conservé. L'algorithme partition ne conserve pas nécessairement ce classement d'origine.

Exemple

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

bool greater5 ( int value ) {
   return value >5;
}

int main( ) {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2, result;

   int i;
   for ( i = 0 ; i <= 10 ; i++ )
      v1.push_back( i );

   int ii;
   for ( ii = 0 ; ii <= 4 ; ii++ )
      v1.push_back( 5 );

   random_shuffle(v1.begin( ), v1.end( ) );

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

   // Partition the range with predicate greater10
   result = stable_partition (v1.begin( ), v1.end( ), greater5 );
   cout << "The partitioned set of elements in v1 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   cout << "The first element in v1 to fail to satisfy the"
        << "\n predicate greater5 is: " << *result << "." << endl;
}

Résultat de l'exemple

Vector v1 is ( 5 1 9 2 0 5 7 3 4 5 8 5 5 5 10 6 ).
The partitioned set of elements in v1 is:
 ( 9 7 8 10 6 5 1 2 0 5 3 4 5 5 5 5 ).
The first element in v1 to fail to satisfy the
 predicate greater5 is: 5.

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)