تحتوي لغة C++ على فئة في مكتبة خوارزميات STL الخاصة بها والتي تتيح لنا خوارزميات التقسيم السهلة باستخدام وظائف معينة مدمجة. يشير التقسيم إلى عملية تقسيم عناصر الحاويات حسب حالة معينة.
عمليات التقسيم :
1. التقسيم (حالة نهاية التسول) :- تستخدم هذه الوظيفة ل تقسيم العناصر على أساس الشرط المذكورة في حججها.
2.is_partitioned(حالة نهاية التسول) :- هذه الدالة ترجع منطقية صحيح إذا تم تقسيم الحاوية آخر يعود كاذبة.
// 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; }
الإخراج:
جافا تحويل شار إلى int
Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7
في أقسام وظيفة قسم التعليمات البرمجية أعلاه، يتم تقسيم المتجه اعتمادًا على ما إذا كان العنصر زوجيًا أو فرديًا، من العناصر الفردية بدون ترتيب معين.
3. قسم مستقر (حالة نهاية التسول) :- تستخدم هذه الوظيفة ل تقسيم العناصر على أساس الشرط ذكره في حججه بحيث يتم الحفاظ على الترتيب النسبي للعناصر. .
4. Partition_point (حالة نهاية التسول) :- هذه الوظيفة تقوم بإرجاع مكرر يشير إلى نقطة القسم الحاوية، أي العنصر الأول في النطاق المقسم [يبدأ] والذي يكون شرطه غير صحيح. يجب أن تكون الحاوية مقسمة بالفعل حتى تعمل هذه الوظيفة.
// 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 (حالة التسول 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