C++ ha una classe nella sua libreria di algoritmi STL che ci consente semplici algoritmi di partizionamento utilizzando determinate funzioni integrate. La partizione si riferisce all'atto di dividere gli elementi dei contenitori in base a una determinata condizione.
Operazioni di partizione :
1. partizione (condizione di fine inizio) :- Questa funzione viene utilizzata per suddividere gli elementi SU base della condizione citato nelle sue argomentazioni.
2. is_partitioned (condizione di fine inizio) :- Questa funzione restituisce un valore booleano true se il contenitore è partizionato altrimenti restituisce false.
// 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; }
Produzione:
topologie di rete
Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7
Nella funzione di partizione del codice sopra suddivisa il vettore a seconda che un elemento sia pari o dispari, gli elementi pari sono partizionati dagli elementi dispari senza un ordine particolare.
3. stable_partition (condizione di fine inizio) :- Questa funzione viene utilizzata per suddividere gli elementi SU base della condizione menzionato nelle sue argomentazioni in in modo tale da preservare l'ordine relativo degli elementi. .
4. punto_partizione (condizione di fine inizio) :- Questa funzione restituisce un iteratore che punta al punto di partizione di contenitore, ovvero il primo elemento nell'intervallo partizionato [begend) per il quale la condizione non è vera. Il contenitore dovrebbe già essere partizionato affinché questa funzione funzioni.
// 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; }
Produzione:
The partitioned vector is : 2 6 8 1 5 7 The vector elements returning true for condition are : 2 6 8
Nel codice sopra gli elementi pari e dispari sono partizionati e in ordine crescente (ordinati). Non sempre in ordine crescente, anche se qui gli elementi (pari e dispari) apparivano in ordine crescente, così come il risultato dopo la partizione. se vect fosse stato { 217865 } dopo stable_partition() sarebbe { 286175 }. L'ordine di apparizione viene mantenuto.
5. partizione_copia (condizione inizio inizio inizio1 inizio2) :- Questa funzione copia gli elementi partizionati nei diversi contenitori menzionati nelle sue argomentazioni. Sono necessari 5 argomenti. Posizione iniziale e finale del contenitore posizione iniziale del nuovo contenitore in cui gli elementi devono essere copiati (elementi che restituiscono true per la condizione) posizione iniziale del nuovo contenitore in cui devono essere copiati gli altri elementi (elementi che restituiscono false per la condizione) e la condizione . Ridimensionamento nuovi contenitori è necessario per questa funzione.
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; }
Produzione:
The elements that return true for condition are : 2 6 8 The elements that return false for condition are : 1 5 7