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.
// 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:
zamów losowo sql
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.
// 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