Algorithm Is Partitioned Function - C++ Programming Tutorial
C++ Course / STL Algorithm / Algorithm Is Partitioned Function

Algorithm Is Partitioned Function

BLUF: Mastering Algorithm Is Partitioned Function is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Algorithm Is Partitioned Function

C++ is renowned for its efficiency. Learn how Algorithm Is Partitioned Function enables low-level control and high-performance computing in the tutorial below.

The C++ function is_partitioned is employed to verify if a specified range [first, last) is partitioned based on a given predicate. Essentially, this means that all elements in the range that meet the predicate criteria are positioned at the start of the sequence.

If the range is empty then it returns true.

Syntax

Example

template <class InputIterator, class UnaryPredicate>
  bool is_partitioned (InputIterator first, InputIterator last, UnaryPredicate pred);

Parameter

An input iterator that references the initial element within the specified range.

last: An input iterator that points to the element just beyond the end of the specified range.

pred : A custom unary predicate function created by the user, which evaluates to true for elements anticipated to appear at the start of the specified range.

Return value

This function will return true if the range is either empty or divided by the specified predicate pred, otherwise it will return false.

Complexity

The complexity increases linearly within the specified range [first, last), as it calls the pred function for each element until a discrepancy is encountered.

Data races

The elements within the range [first, last) are being retrieved.

Each element is accessed exactly once.

Exceptions

This function will raise an exception if either pred or any operation on the iterator results in an exception.

Please be aware that supplying invalid parameters can result in undefined behavior.

Example 1

Let's explore a basic example to showcase the functionality of the is_partitioned function:

Example

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
  vector<int> v = {1, 2, 3, 4, 5};
  
  cout<<"Before Partition: ";
    for_each(v.begin(), v.end(), [](int v) {
   cout << v << " ";
  });

  auto pred = [](int x) { return x % 2 == 0; };

  // Divide it into an even group and an odd group 
  partition(v.begin(), v.end(), pred);
  cout<<"\nAfter partition : ";
  for_each(v.begin(), v.end(), [](int x) {
   cout << x << " ";
  });

  cout<<"\n\nIs it partitioned?"<<endl;
  // Is it divided into an even group and an odd group?  
  if (is_partitioned(v.begin(), v.end(), pred)) {
    cout << "Yes,It is Partitioned" << endl;
  }
  else {
    cout << "No,It is not Partitioned" << endl;
  }
  
  return 0;
}

Output:

Output

Before Partition: 1 2 3 4 5 
After partition : 4 2 3 1 5 

Is it partitioned?
Yes,It is Partitioned

Example 2

Let's see another simple example:

Example

#include <iostream> 
#include <algorithm> 
#include <vector> 
  
// Defining the BinaryFunction 
bool pred(int a) 
{ 
    return (a % 2 == 0); 
} 
  
using namespace std; 
int main() 
{ 
    // Declaring first vector 
    vector<int> v1 = { 2, 4, 6, 3, 5, 7, 9 }; 
  
    // Using std::is_partitioned 
    bool b = std::is_partitioned(v1.begin(), v1.end(), pred); 
  
    if (b == 1) { 
        cout << "All the even no. are present before odd no."; 
    } else { 
        cout << "All the even no. are not present before odd no."; 
    } 
  
    // Inserting an even no. at the end of v1 
    // so std::is_partitioned returns false 
    v1.push_back(16); 
  
    // Now again using std::is_partitioned 
    b = std::is_partitioned(v1.begin(), v1.end(), pred); 
  
    if (b == 1) { 
        cout << "\nAll the even no. are present before odd no."; 
    } else { 
        cout << "\nAll the even no. are not present before odd no."; 
    } 
  
    return 0; 
}

Output:

Output

All the even no. are present before odd no.
All the even no. are not present before odd no.

Example 3

Let's see another simple example:

Example

#include <algorithm>
#include <array>
#include <iostream>
 
int main()
{
    std::array<int, 9> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 
    auto is_even = [](int i){ return i % 2 == 0; };
    std::cout.setf(std::ios_base::boolalpha);
    std::cout << std::is_partitioned(v.begin(), v.end(), is_even) << ' ';
 
    std::partition(v.begin(), v.end(), is_even);
    std::cout << std::is_partitioned(v.begin(), v.end(), is_even) << ' ';
 
    std::reverse(v.begin(), v.end());
    std::cout << std::is_partitioned(v.begin(), v.end(), is_even);
}

Output:

Output

false true false

Example 4

Let's see another simple example:

Example

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
  vector<int> v = {11, 2, 3, 4, 15, 12};
  
  cout<<"Before Partition: ";
    for_each(v.begin(), v.end(), [](int v) {
   cout << v << " ";
  });

  auto pred = [](int x) { return x < 10; };
 
  // Divide it into an even group and an odd group 
  partition(v.begin(), v.end(), pred);
  cout<<"\nAfter partition: ";
  for_each(v.begin(), v.end(), [](int x) {
   cout << x << " ";
  });

  cout<<"\n\nIs it partitioned?"<<endl;
  // Is it divided into an even group and an odd group?  
  if (is_partitioned(v.begin(), v.end(), pred)) {
    cout << "Yes, It is Partitioned." << endl;
  }
  else {
    cout << "No, It is not Partitioned." << endl;
  }
  
  return 0;
}

Output:

Output

Before Partition: 11 2 3 4 15 12 
After partition: 4 2 3 11 15 12 

Is it partitioned?
Yes, It is Partitioned.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience