thrust::partition_point

Defined in thrust/partition.h

template<typename DerivedPolicy, typename ForwardIterator, typename Predicate>
ForwardIterator thrust::partition_point(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, ForwardIterator first, ForwardIterator last, Predicate pred)

partition_point returns an iterator pointing to the end of the true partition of a partitioned range. partition_point requires the input range [first,last) to be a partition; that is, all elements which satisfy pred shall appear before those that do not.

The algorithm’s execution is parallelized as determined by exec.

#include <thrust/partition.h>
#include <thrust/execution_policy.h>

struct is_even
{
  __host__ __device__
  bool operator()(const int &x)
  {
    return (x % 2) == 0;
  }
};

...

int A[] = {2, 4, 6, 8, 10, 1, 3, 5, 7, 9};
int * B = thrust::partition_point(thrust::host, A, A + 10, is_even());
// B - A is 5
// [A, B) contains only even values

See also

partition

See also

find_if_not

Note

Though similar, partition_point is not redundant with find_if_not. partition_point's precondition provides an opportunity for a faster implementation.

Parameters
  • exec – The execution policy to use for parallelization.

  • first – The beginning of the range to consider.

  • last – The end of the range to consider.

  • pred – A function object which decides to which partition each element of the range [first, last) belongs.

Template Parameters
  • DerivedPolicy – The name of the derived execution policy.

  • ForwardIterator – is a model of Forward Iterator, and ForwardIterator's value_type is convertible to Predicate's argument_type.

  • Predicate – is a model of Predicate.

Returns

An iterator mid such that all_of(first, mid, pred) and none_of(mid, last, pred) are both true.

Pre

The range [first, last) shall be partitioned by pred.