C++ tem uma classe em sua biblioteca de algoritmos STL que nos permite algoritmos de partição fáceis usando certas funções embutidas. Partição refere-se ao ato de dividir elementos de contêineres dependendo de uma determinada condição.
Operações de partição :
1. partição (início da condição final) :- Esta função é usada para particionar os elementos sobre base da condição mencionado em seus argumentos.
2. is_partitioned (início da condição final) : - Esta função retorna booleano verdadeiro se o contêiner estiver particionado senão retorna falso.
// 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; }
Saída:
string para char em java
Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7
No código acima, a função de partição particiona o vetor dependendo se um elemento é par ou ímpar, os elementos pares são particionados dos elementos ímpares em nenhuma ordem específica.
3. stable_partition (início da condição final) :- Esta função é usada para particionar os elementos sobre base da condição mencionado em seus argumentos em de forma que a ordem relativa dos elementos seja preservada. .
4. ponto_partição(início da condição final) : - Esta função retorna um iterador apontando para o ponto de partição do contêiner, ou seja, o primeiro elemento no intervalo particionado [begend) para o qual a condição não é verdadeira. O contêiner já deve estar particionado para que esta função funcione.
// 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; }
Saída:
The partitioned vector is : 2 6 8 1 5 7 The vector elements returning true for condition are : 2 6 8
No código acima, os elementos pares e ímpares são particionados e em ordem crescente (classificados). Nem sempre em ordem crescente, embora aqui os elementos (pares e ímpares) tenham aparecido em ordem crescente, assim como o resultado após a partição. se vect fosse { 217865 } depois de stable_partition() seria { 286175 }. A ordem de aparição é mantida.
5. partição_copy (início final beg1 condição beg2) : - Esta função copia os elementos particionados nos diferentes recipientes mencionados em seus argumentos. São necessários 5 argumentos. Posição inicial e final do contêiner Posição inicial do novo contêiner onde os elementos devem ser copiados (elementos retornando verdadeiros para condição) Posição inicial do novo contêiner onde outros elementos devem ser copiados (elementos retornando falso para condição) e a condição . Redimensionar novos contêineres é necessário para esta função.
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; }
Saída:
The elements that return true for condition are : 2 6 8 The elements that return false for condition are : 1 5 7