Front Page / Sequences / Concepts / Forward Sequence

# Forward Sequence

### Description

A Forward Sequence is an MPL concept representing a compile-time sequence of elements. Sequence elements are types, and are accessible through Iterators. The begin and end metafunctions provide iterators delimiting the range of the sequence elements. A sequence guarantees that its elements are arranged in a definite, but possibly unspecified, order. Every MPL sequence is a Forward Sequence.

### Definitions

- The size of a sequence is the number of elements it contains. The size is a nonnegative number.
- A sequence is empty if its size is zero.

### Expression requirements

For any Forward Sequence `s` the following expressions must be valid:

Expression | Type | Complexity
--- | --- | ---
`begin<s>::type` | Forward Iterator | Amortized constant time
`end<s>::type` | Forward Iterator | Amortized constant time
`size<s>::type` | Integral Constant | Unspecified
`empty<s>::type` | Boolean Integral Constant | Constant time
`front<s>::type` | Any type | Amortized constant time

### Expression semantics

Expression | Semantics
--- | ---
`begin<s>::type` | An iterator to the first element of the sequence; see begin.
`end<s>::type` | A past-the-end iterator to the sequence; see end.
`size<s>::type` | The size of the sequence; see size.
`empty<s>::type` | A boolean Integral Constant `c` such that `c::value == true` if and only if the sequence is empty; see empty.
`front<s>::type` | The first element in the sequence; see front.

### Invariants

For any Forward Sequence `s` the following invariants always hold:

- [`begin<s>::type`, `end<s>::type`) is always a valid range.
- An algorithm that iterates through the range [`begin<s>::type`, `end<s>::type`) will pass through every element of `s` exactly once.
- `begin<s>::type` is identical to `end<s>::type` if and only if `s` is empty.
- Two different iterations through `s` will access its elements in the same order.

### Models

- vector
- map
- range_c
- iterator_range
- filter_view

### See also

Sequences, Bidirectional Sequence, Forward Iterator, begin / end, size, empty, front