logo

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: 



interface versus abstracte klasse
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