| Front Page / Algorithms / Transformation Algorithms / unique |
template<
typename Seq
, typename Pred
, typename In = unspecified
>
struct unique
{
typedef unspecified type;
};
Returns a sequence of the initial elements of every subrange of the original sequence Seq whose elements are all the same.
[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/unique.hpp>
| Parameter | Requirement | Description |
|---|---|---|
| Sequence | Forward Sequence | An original sequence. |
| Pred | Binary Lambda Expression | An equivalence relation. |
| In | Inserter | An inserter. |
The semantics of an expression are defined only where they differ from, or are not defined in Reversible Algorithm.
For any Forward Sequence s, a binary Lambda Expression pred, and an Inserter in:
typedef unique<s,pred,in>::type r;
| Return type: | A type. |
|---|---|
| Semantics: | If size<s>::value <= 1, then equivalent to typedef copy<s,in>::type r; otherwise equivalent to typedef lambda<pred>::type p; typedef lambda<in::operation>::type in_op; typedef apply_wrap2< in_op , in::state , front<types>::type >::type in_state; typedef fold< s , pair< in_state, front<s>::type > , eval_if< apply_wrap2<p, second<_1>, _2> , identity< first<_1> > , apply_wrap2<in_op, first<_1>, _2> > >::type::first r; |
Linear. Performs exactly size<s>::value - 1 applications of pred, and at most size<s>::value insertions.