Front Page / Sequences / Intrinsic Metafunctions / erase

# erase

### Synopsis

    template<
          typename Sequence
        , typename First
        , typename Last = unspecified
        >
    struct erase
    {
        typedef unspecified type;
    };

### Description

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

### Header

    #include <boost/mpl/erase.hpp>

### Model of

Tag Dispatched Metafunction

### Parameters

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`).
Postcondition: | 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`.
Semantics: | 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`.

### Complexity

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

### Example

    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`