STL: partition
partition
Classifies elements in a range into two disjoint sets, with those elements satisfying a unary predicate preceding those that fail to satisfy it.
template<class BidirectionalIterator, class Predicate> BidirectionalIterator partition( BidirectionalIterator _First, BidirectionalIterator _Last, Predicate _Comp );
stable_partition
Classifies elements in a range into two disjoint sets, with those elements satisfying a unary predicate preceding those that fail to satisfy it, preserving the relative order of equivalent elements.
template<class BidirectionalIterator, class Predicate> BidirectionalIterator stable_partition( BidirectionalIterator _First, BidirectionalIterator _Last, Predicate _Pred );
partition_copy
Copies elements for which a condition is true to one destination, and for which the condition is false to another. The elements must come from a specified range.
template<class InputIterator, class OutputIterator1, class OutputIterator2, class Predicate> pair<OutputIterator1, OutputIterator2> partition_copy( InputIterator _First, InputIterator _Last, OutputIterator1 _Dest1, OutputIterator2 _Dest2, Predicate _Pred );