C ++ има клас в своята библиотека STL алгоритми, която ни позволява лесни алгоритми за дял, използвайки определени вградени функции. Дял се отнася до акт на разделяне на елементи на контейнери в зависимост от дадено условие.
Операции за дял :
1. Дял (молещо крайно състояние) :- Тази функция се използва Разделете елементите на Основа на състоянието споменати в неговите аргументи.
2. IS_PARTITIED (BEG CEND STAMES) :- Тази функция връща булева Вярно, ако контейнерът е разделен else връща 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; }
Резултат:
ръчно тестване
Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7
В горните кодови функции на разделянето на функциите на кода векторът в зависимост от това дали елементът е равномерен или странни равномерни елементи са разделени от нечетни елементи в никакъв конкретен ред.
3. Stable_Partition (Beg End състояние) :- Тази функция се използва Разделете елементите на Основа на състоянието споменати в неговите аргументи в Подобен начин, че относителният ред на елементите е запазен. .
4. Partition_Point (BEG END SOMITY) :- Тази функция Връща итератор, сочещ към точката на дял на контейнера, т.е. първият елемент в разделения диапазон [Begend), за който условието не е вярно. Контейнерът вече трябва да бъде разделен, за да работи тази функция.
// 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; }
Резултат:
The partitioned vector is : 2 6 8 1 5 7 The vector elements returning true for condition are : 2 6 8
В горния код равномерни и нечетни елементи са разделени и в нарастващия ред (сортиран). Не винаги във все по -голям ред, въпреки че тук елементите (равномерни и нечетни) се появяват в увеличен ред, така е резултатът след разделянето. Ако Vect щеше да бъде {217865} след stable_partition (), това ще бъде {286175}. Поддържа се редът на външния вид.
5. Partition_copy (BEG END BEG1 BEG2 състояние) :- Тази функция копира разделените елементи В различните контейнери, споменати в неговите аргументи. Отнема 5 аргумента. Начало и крайно положение на контейнер Начална позиция на нов контейнер, където трябва да се копират елементи (елементи, връщащи се вярно за условие) начална позиция на нов контейнер, където трябва да се копират други елементи (елементи, връщащи невярно за условие) и условието . Оразмеряване Нови контейнери е необходимо За тази функция.
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; }
Резултат:
The elements that return true for condition are : 2 6 8 The elements that return false for condition are : 1 5 7