...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 / 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.