std::partycja w C++ STL

C++ ma klasę w swojej bibliotece algorytmów STL, która pozwala nam na łatwe algorytmy partycjonowania przy użyciu pewnych wbudowanych funkcji. Podział oznacza czynność podziału elementów kontenerów w zależności od zadanego stanu. 
Operacje partycjonujące :
1. partycja (rozpocznij od warunku końcowego) :- Ta funkcja jest używana podziel elementy NA podstawa warunku wspomniano w jej argumentach.
2. is_partitioned (zacznij od warunku końcowego) :- Ta funkcja zwraca wartość logiczną true, jeśli kontener jest podzielony w przeciwnym razie zwraca wartość 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  ;       }   

Wyjście: 

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

W powyższym kodzie funkcja podziału wektora dzieli wektor w zależności od tego, czy element jest parzysty czy nieparzysty, elementy parzyste są dzielone od elementów nieparzystych w dowolnej kolejności. 
3. partycja stabilna (zacznij od warunku końcowego) :- Ta funkcja jest używana podziel elementy NA podstawa warunku wspomniano w jej argumentacji w w taki sposób, aby zachować względną kolejność elementów. .
4. punkt_podziału (rozpocznij warunek końcowy) :- Ta funkcja zwraca iterator wskazujący punkt podziału kontenera, czyli pierwszy element w podzielonym zakresie [begend), dla którego warunek nie jest spełniony. Aby ta funkcja działała, kontener powinien być już podzielony na partycje.

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

Wyjście: 

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

W powyższym kodzie elementy parzyste i nieparzyste zostały podzielone w kolejności rosnącej (posortowane). Nie zawsze w kolejności rosnącej, chociaż tutaj elementy (parzyste i nieparzyste) pojawiały się w zwiększonej kolejności, podobnie jak wynik po podziale. jeśli vect miałby wartość { 217865 } po stable_partition(), byłby to { 286175 }. Kolejność występowania jest zachowana.
5. partycja_kopia (warunek początek, początek, początek, początek 2) :- Ta funkcja kopiuje podzielone elementy w różnych pojemnikach wymienionych w jej argumentach. Wymaga 5 argumentów. Pozycja początkowa i końcowa kontenera Pozycja początkowa nowego kontenera, z którego elementy mają zostać skopiowane (elementy zwracające wartość true dla warunku) Pozycja początkowa nowego kontenera, z którego należy skopiować inne elementy (elementy zwracające wartość false dla warunku) i warunek . Zmiana rozmiaru nowe kontenery jest konieczne dla tej funkcji.

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

Wyjście: 

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