logo

std::partycja w C++ STL

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.

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;   } 

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.

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;   } 

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