logo

std :: partition i C ++ stl

C ++ har en klasse i sine STL -algoritmer -bibliotek, som tillader os lette partitionsalgoritmer ved hjælp af visse indbyggede funktioner. Opdeling henviser til handling med opdelende elementer af containere afhængigt af en given betingelse. 
Opdelingsoperationer :
1. Partition (Beg sluttilstand) :- Denne funktion er vant til Opdel elementernebasis af tilstand nævnt i sine argumenter.
2. is_partitioneret (Beg sluttilstand) :- Denne funktion returnerer boolsk sandt, hvis containeren er opdelt ellers vender tilbage 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;   } 

Produktion: 



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

I ovennævnte kodepartitionsfunktionsopdelinger er vektoren afhængig af om et element er jævnt eller underligt, selv elementer er opdelt fra ulige elementer i ingen særlig rækkefølge. 
3. stable_partition (Beg sluttilstand) :- Denne funktion er vant til Opdel elementernebasis af tilstand nævnt i sine argumenter i En sådan måde, at den relative rækkefølge af elementerne bevares. .
4. partition_point (Beg sluttilstand) :- Denne funktion Returnerer en iterator, der peger på partitionspunktet af container, dvs. det første element i det opdelte interval [Begend), som betingelsen ikke er sand for. Containeren skal allerede opdeles for, at denne funktion fungerer.

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

Produktion: 

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

I ovenstående kode er jævnt og ulige elementer opdelt og i den stigende rækkefølge (sorteret). Ikke altid i stigende rækkefølge, men her optrådte elementerne (jævnt og ulige) i øget rækkefølge, så er resultatet efter opdeling. Hvis Vect ville have været {217865} efter stabil_partition () ville det være {286175}. Rækkefølgen af ​​udseende opretholdes.
5. PARTITION_COPY (BEG END Beg1 BEG2 -tilstand) :- Denne funktion Kopierer de partitionerede elementer I de forskellige containere, der er nævnt i sine argumenter. Det kræver 5 argumenter. Begyndelses- og slutposition af containerens begyndelsesposition af ny beholder, hvor elementer skal kopieres (elementer, der vender tilbage til tilstand) Begyndelsesposition for ny container, hvor andre elementer skal kopieres (elementer, der vender tilbage til falsk for tilstand) og tilstanden . Ændring af størrelse Nye containere er nødvendigt For denne funktion.



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

Produktion: 

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