...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

Front Page / Algorithms / Transformation Algorithms / partition |

template< typename Seq , typename Pred , typename In1 =unspecified, typename In2 =unspecified> struct partition { typedefunspecifiedtype; };

Returns a pair of sequences together containing all elements in the range
[`begin<Seq>::type`, `end<Seq>::type`) split into two groups based on the predicate `Pred`.
`partition` is a synonym for stable_partition.

[*Note:* This wording applies to a no-inserter version(s) of the algorithm. See the
Expression semantics subsection for a precise specification of the algorithm's
details in all cases — *end note*]

#include <boost/mpl/partition.hpp>

Parameter | Requirement | Description |
---|---|---|

Seq |
Forward Sequence | An original sequence. |

Pred |
Unary Lambda Expression | A partitioning predicate. |

In1, In2 |
Inserter | Output inserters. |

The semantics of an expression are defined only where they differ from, or are not defined in Reversible Algorithm.

For any Forward Sequence `s`, an unary Lambda Expression `pred`, and Inserters
`in1` and `in2`:

typedef partition<s,pred,in1,in2>::type r;

Return type: | A pair. |
---|---|

Semantics: | Equivalent to typedef stable_partition<s,pred,in1,in2>::type r; |

Linear. Exactly `size<s>::value` applications of `pred`, and `size<s>::value`
of summarized `in1::operation` / `in2::operation` applications.

template< typename N > struct is_odd : bool_<(N::value % 2)> {}; typedef partition< range_c<int,0,10> , is_odd<_1> , back_inserter< vector<> > , back_inserter< vector<> > >::type r; BOOST_MPL_ASSERT(( equal< r::first, vector_c<int,1,3,5,7,9> > )); BOOST_MPL_ASSERT(( equal< r::second, vector_c<int,0,2,4,6,8> > ));