The MPL Reference Manual: list

Front Page / Sequences / Classes / list

# list

### Description

A `list` is a variadic, forward, extensible sequence of types that supports constant-time insertion and removal of elements at the beginning, and linear-time insertion and removal of elements at the end and in the middle.

### Header

Sequence form | Header
--- | ---
Variadic | `#include <boost/mpl/list.hpp>`
Numbered | `#include <boost/mpl/list/list`n`.hpp>`

### Model of

- Variadic Sequence
- Forward Sequence
- Extensible Sequence
- Front Extensible Sequence

### Expression semantics

In the following table, `l` is a `list`, `pos` and `last` are iterators into `l`, `r` is a Forward Sequence, and t1,t2,... tn and `x` are arbitrary types.

Expression | Semantics
--- | ---
    list<t1,t2,... tn>
    listn<t1,t2,... tn>
| `list` of elements t1,t2,... tn; see Variadic Sequence.
    list<t1,t2,... tn>::type
    listn<t1,t2,... tn>::type
| Identical to `list`n`<`t1,t2,... tn`>`; see Variadic Sequence.
`begin<l>::type` | An iterator to the beginning of `l`; see Forward Sequence.
`end<l>::type` | An iterator to the end of `l`; see Forward Sequence.
`size<l>::type` | The size of `l`; see Forward Sequence.
`empty<l>::type` | A boolean Integral Constant `c` such that `c::value == true` if and only if `l` is empty; see Forward Sequence.
`front<l>::type` | The first element in `l`; see Forward Sequence.
`insert<l,pos,x>::type` | A new `list` of following elements: [`begin<l>::type`, `pos`), `x`, [`pos`, `end<l>::type`); see Extensible Sequence.
`insert_range<l,pos,r>::type` | A new `list` of following elements: [`begin<l>::type`, `pos`), [`begin<r>::type`, `end<r>::type`) [`pos`, `end<l>::type`); see Extensible Sequence.
`erase<l,pos>::type` | A new `list` of following elements: [`begin<l>::type`, `pos`), [`next<pos>::type`, `end<l>::type`); see Extensible Sequence.
`erase<l,pos,last>::type` | A new `list` of following elements: [`begin<l>::type`, `pos`), [`last`, `end<l>::type`); see Extensible Sequence.
`clear<l>::type` | An empty `list`; see Extensible Sequence.
`push_front<l,x>::type` | A new `list` containing `x` as its first element; see Front Extensible Sequence.
`pop_front<l>::type` | A new `list` containing all but the first elements of `l` in the same order; see Front Extensible Sequence.

### Example

    typedef list<float,double,long double> floats;
    typedef push_front<floats,int>::type types;

    BOOST_MPL_ASSERT(( is_same< front<types>::type, int > ));

### See also

Sequences, Variadic Sequence, Forward Sequence, Extensible Sequence, vector, list_c