std :: partisjon i C ++ STL

C ++ har en klasse i sitt STL -algoritmerbibliotek som lar oss enkle partisjonsalgoritmer ved hjelp av visse innebygde funksjoner. Partisjon refererer til å dele ut elementer av containere avhengig av en gitt tilstand. 
Partisjonsoperasjoner :
1. Partisjon (Beg End Condition) :- Denne funksjonen brukes til partisjon elementene Grunnlag for tilstand nevnt i sine argumenter.
2. IS_Partitioned (Beg End Condition) :- Denne funksjonen returnerer boolsk sant hvis container er delt annet returnerer falsk.

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

Produksjon: 

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

I ovennevnte kodepartisjonsfunksjonspartisjoner partisjoner vektoren avhengig av om et element er jevn eller rare til og med elementer er delt ut fra rare elementer i ingen spesiell rekkefølge. 
3. Stabil_partition (Beg End Condition) :- Denne funksjonen brukes til partisjon elementene Grunnlag for tilstand nevnt i sine argumenter i En slik måte at den relative rekkefølgen på elementene er bevart. .
4. Partition_point (Beg End Condition) :- Denne funksjonen Returnerer en iterator som peker på partisjonspunktet av container, dvs. det første elementet i det partisjonerte området [Begend) for hvilken tilstand ikke er sant. Beholderen skal allerede deles opp for at denne funksjonen skal fungere.

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

Produksjon: 

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

I koden ovenfor er jevn og rare elementer delt og i den økende rekkefølgen (sortert). Ikke alltid i økende rekkefølge, men her dukket elementene (jevn og rart) opp i økt rekkefølge, så er resultatet etter partisjon. Hvis VECT ville vært {217865} etter Stable_Partition () ville det være {286175}. Rekkefølgen på utseendet opprettholdes.
5. PARTITION_COPY (BEG END BEG1 BEG2 -tilstand) :- Denne funksjonen kopierer de partisjonerte elementene I de forskjellige containerne som er nevnt i sine argumenter. Det tar 5 argumenter. Begynnelses- og sluttposisjonen til container Begynnelsesposisjon til ny beholder der elementer må kopieres (elementer som returnerer sann for tilstand) Begynnelsesposisjon til ny beholder der andre elementer må kopieres (elementer som kommer tilbake for tilstand) og tilstanden . Størrelse Nye containere er nødvendig for denne funksjonen.

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

Produksjon: 

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