partition

Classifie des éléments dans une plage en deux disjoignent des jeux, avec ces éléments satisfaite un attribut unaire précédant ceux qui ne le contenu pas.

template<class BidirectionalIterator, class Predicate>
   BidirectionalIterator partition(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last, 
      Predicate _Comp
   );

Paramètres

  • _First
    Un itérateur bidirectionnel adressant la position du premier élément dans la plage à partitionner.

  • _Last
    Un itérateur bidirectionnel adressant une position au delà de le dernier élément dans la plage à partitionner.

  • _Comp
    Objet défini par l'utilisateur de fonction de prédicat qui définit la condition à satisfaire si un élément doit être classifié.Un attribut prend un argument unique et retourne true ou false.

Valeur de retour

Un itérateur bidirectionnel adressant la position du premier élément de la plage pour ne pas exécuter la condition d'attribut.

Notes

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.

Les éléments a et b sont identiques, mais pas nécessairement égales, si les deux Pr (a, b) a la valeur false et Pr (b, a) si la valeur false, où Pr est l'attribut paramètre- spécifié.L'algorithme de partition n'est pas stable et ne garantit pas que le classement relatif des éléments équivalents est conservé.L'algorithme stable_ partition conserve ce classement d'origine.

La complexité est linéaire : il existe_Last (–) _Firstdes applications d' _Comp et au plus (_Last – _First) /2 permute.

Exemple

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

   int i;
   for ( i = 0 ; i <= 10 ; i++ )
   {
      v1.push_back( i );
   }
   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
   partition ( v1.begin( ), v1.end( ), greater5 );
   cout << "The partitioned set of elements in v1 is: ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Résultat de l'exemple

Vector v1 is ( 10 1 9 2 0 5 7 3 4 6 8 ).
The partitioned set of elements in v1 is: ( 10 8 9 6 7 5 0 3 4 2 1 ).

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

partition (STL Samples)

Modèles Standard