Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Front Page / Sequences / Intrinsic Metafunctions / erase



      typename Sequence
    , typename First
    , typename Last = unspecified
struct erase
    typedef unspecified type;


erase performs a removal of one or more adjacent elements in the sequence starting from an arbitrary position.


#include <boost/mpl/erase.hpp>

Model of

Tag Dispatched Metafunction


Parameter Requirement Description
Sequence Extensible Sequence or Extensible Associative Sequence A sequence to erase from.
First Forward Iterator An iterator to the beginning of the range to be erased.
Last Forward Iterator An iterator past-the-end of the range to be erased.

Expression semantics

For any Extensible Sequence s, and iterators pos, first and last into s:

typedef erase<s,first,last>::type r; 
Return type:Extensible Sequence.
Precondition:[first,last) is a valid range in s.
Semantics:r is a new sequence, concept-identical to s, of the following elements: [begin<s>::type, pos), [last, end<s>::type).

The relative order of the elements in r is the same as in s;

size<r>::value == size<s>::value - distance<first,last>::value
typedef erase<s,pos>::type r;
Return type:Extensible Sequence.
Precondition:pos is a dereferenceable iterator in s.

Equivalent to

typedef erase< s,pos,next<pos>::type >::type r;

For any Extensible Associative Sequence s, and iterator pos into s:

typedef erase<s,pos>::type r;
Return type:Extensible Sequence.
Precondition:pos is a dereferenceable iterator to s.
Semantics:Erases the element at a specific position pos; equivalent to erase_key<s, deref<pos>::type >::type.
Postcondition:size<r>::value == size<s>::value - 1.


Sequence archetype Complexity (the range form)
Extensible Associative Sequence Amortized constant time.
Extensible Sequence Quadratic in the worst case, linear at best.


typedef vector_c<int,1,0,5,1,7,5,0,5> values;
typedef find< values, integral_c<int,7> >::type pos;
typedef erase<values,pos>::type result;

BOOST_MPL_ASSERT_RELATION( size<result>::value, ==, 7 );

typedef find<result, integral_c<int,7> >::type iter;
BOOST_MPL_ASSERT(( is_same< iter, end<result>::type > ));

See also

Extensible Sequence, Extensible Associative Sequence, erase_key, pop_front, pop_back, insert