logo

STD :: מחיצה ב- C ++ STL

ל- C ++ יש מחלקה בספריית האלגוריתמים STL שלה המאפשרת לנו אלגוריתמי חלוקה קלים באמצעות פונקציות מובנות מסוימות. החלוקה מתייחסת לפעולה של חלוקת אלמנטים של מכולות בהתאם למצב נתון. 
פעולות חלוקה :
1. מחיצה (תנאי סוף) :- פונקציה זו משמשת ל חלוקת האלמנטים עַל בסיס מצב מוזכר בטיעוניו.
2. IS_PARTITIONED (תנאי סוף) :- פונקציה זו מחזירה בוליאנית נכון אם המכולה מחולקת אחרת חוזר שקר.

CPP
// 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 (מצב קצה התחנה) :- פונקציה זו משמשת ל חלוקת האלמנטים עַל בסיס מצב מוזכר בטיעוניו ב דרך כזו שהסדר היחסי של האלמנטים נשמר. ו
4. Partition_Point (תנאי סוף) :- פונקציה זו מחזיר איטרטור שמצביע על נקודת המחיצה של מכולה, כלומר האלמנט הראשון בטווח המחולק [GEGEND) אשר תנאי זה אינו נכון. המכולה כבר צריכה להיות מחולקת לפונקציה זו שתעבוד.

CPP
// 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