std::partitie in C++ STL

C++ heeft een klasse in de STL-algoritmenbibliotheek waarmee we eenvoudige partitie-algoritmen kunnen maken met behulp van bepaalde ingebouwde functies. Partitie verwijst naar de handeling waarbij elementen van containers worden verdeeld, afhankelijk van een gegeven toestand. 
Partitiebewerkingen :
1. partitie (begin eindvoorwaarde) : - Deze functie wordt gebruikt verdeel de elementen op basis van conditie genoemd in zijn argumenten.
2. is_partitioned(beg end condition) :- Deze functie retourneert Booleaanse waarde true als de container is gepartitioneerd anders retourneert false.

CPP
   // C++ code to demonstrate the working of    // partition() and is_partitioned()   #include       #include       // for partition algorithm   #include      // for vector   using     namespace     std  ;   int     main  ()   {      // Initializing vector      vector   <  int  >     vect     =     {     2       1       5       6       8       7     };          // Checking if vector is partitioned       // using is_partitioned()      is_partitioned  (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;          })  ?          cout      < <     'Vector is partitioned'  :      cout      < <     'Vector is not partitioned'  ;      cout      < <     endl  ;          // partitioning vector using partition()      partition  (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;          });          // Checking if vector is partitioned       // using is_partitioned()      is_partitioned  (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;          })  ?          cout      < <     'Now vector is partitioned after partition operation'  :      cout      < <     'Vector is still not partitioned after partition operation'  ;      cout      < <     endl  ;          // Displaying partitioned Vector      cout      < <     'The partitioned vector is : '  ;      for     (  int     &  x     :     vect  )     cout      < <     x      < <     ' '  ;          return     0  ;       }   

Uitgang: 

Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7 

In de bovenstaande code verdeelt de partitiefunctie de vector afhankelijk van of een element even of oneven is. Even elementen worden in willekeurige volgorde van oneven elementen gescheiden. 
3. stable_partition(beg end condition) : - Deze functie wordt gebruikt verdeel de elementen op basis van conditie genoemd in zijn argumenten in zodanig dat de relatieve volgorde van de elementen behouden blijft. .
4. partitie_punt(begin-eindvoorwaarde) : - Deze functie retourneert een iterator die naar het partitiepunt verwijst van container, d.w.z. het eerste element in het gepartitioneerde bereik [begend] waarvoor de voorwaarde niet waar is. De container moet al gepartitioneerd zijn om deze functie te laten werken.

CPP
   // C++ code to demonstrate the working of    // stable_partition() and partition_point()   #include       #include       // for partition algorithm   #include      // for vector   using     namespace     std  ;   int     main  ()   {      // Initializing vector      vector   <  int  >     vect     =     {     2       1       5       6       8       7     };          // partitioning vector using stable_partition()      // in sorted order      stable_partition  (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2     ==     0  ;         });          // Displaying partitioned Vector      cout      < <     'The partitioned vector is : '  ;      for     (  int     &  x     :     vect  )     cout      < <     x      < <     ' '  ;      cout      < <     endl  ;          // Declaring iterator      vector   <  int  >::  iterator     it1  ;          // using partition_point() to get ending position of partition      auto     it     =     partition_point  (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;      });          // Displaying partitioned Vector      cout      < <     'The vector elements returning true for condition are : '  ;      for     (     it1  =     vect  .  begin  ();     it1  !=  it  ;     it1  ++  )      cout      < <     *  it1      < <     ' '  ;      cout      < <     endl  ;          return     0  ;       }   

Uitgang: 

The partitioned vector is : 2 6 8 1 5 7 The vector elements returning true for condition are : 2 6 8 

In de bovenstaande code worden even en oneven elementen gepartitioneerd en in oplopende volgorde (gesorteerd). Niet altijd in oplopende volgorde, hoewel hier de elementen (even en oneven) in verhoogde volgorde verschenen, net als het resultaat na partitie. als vect { 217865 } zou zijn geweest na stable_partition() zou het  { 286175 } zijn. De volgorde van verschijnen wordt gehandhaafd.
5. partitie_kopie(beg end beg1 beg2 condition) : - Deze functie kopieert de gepartitioneerde elementen in de verschillende containers die in zijn argumenten worden genoemd. Er zijn 5 argumenten nodig. Begin- en eindpositie van de container, beginpositie van de nieuwe container waar elementen moeten worden gekopieerd (elementen retourneren waar voor voorwaarde) beginpositie van nieuwe container waar andere elementen moeten worden gekopieerd (elementen retourneren onwaar voor voorwaarde) en de voorwaarde . Formaat wijzigen nieuwe containers is noodzakelijk voor deze functie.

CPP
   // C++ code to demonstrate the working of    // partition_copy()   #include       #include       // for partition algorithm   #include      // for vector   using     namespace     std  ;   int     main  ()   {      // Initializing vector      vector   <  int  >     vect     =     {     2       1       5       6       8       7     };          // Declaring vector1      vector   <  int  >     vect1  ;          // Declaring vector1      vector   <  int  >     vect2  ;          // Resizing vectors to suitable size using count_if() and resize()      int     n     =     count_if     (  vect  .  begin  ()     vect  .  end  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;          }     );      vect1  .  resize  (  n  );         vect2  .  resize  (  vect  .  size  ()  -  n  );          // Using partition_copy() to copy partitions      partition_copy  (  vect  .  begin  ()     vect  .  end  ()     vect1  .  begin  ()         vect2  .  begin  ()     [](  int     x  )      {      return     x  %  2  ==  0  ;      });              // Displaying partitioned Vector      cout      < <     'The elements that return true for condition are : '  ;      for     (  int     &  x     :     vect1  )         cout      < <     x      < <     ' '  ;      cout      < <     endl  ;          // Displaying partitioned Vector      cout      < <     'The elements that return false for condition are : '  ;      for     (  int     &  x     :     vect2  )         cout      < <     x      < <     ' '  ;      cout      < <     endl  ;          return     0  ;      }   

Uitgang: 

The elements that return true for condition are : 2 6 8 The elements that return false for condition are : 1 5 7