std::contiguous_iterator
Defined in header <iterator>
|
||
template
<
class I >
concept contiguous_iterator =
|
(since C++20) | |
The contiguous_iterator
concept refines random_access_iterator
Iterator concept determination
Definition of this concept is specified via an exposition-only alias template /*ITER_CONCEPT*/.
In order to determine /*ITER_CONCEPT*/<I>, let ITER_TRAITS<I> denote I if the specialization std::iterator_traits<I> is generated from the primary template, or std::iterator_traits<I>
- If ITER_TRAITS<I>::iterator_concept is valid and names a type, /*ITER_CONCEPT*/<I>
- Otherwise, if ITER_TRAITS<I>::iterator_category is valid and names a type, /*ITER_CONCEPT*/<I>
- Otherwise, if std::iterator_traits<I> is generated from the primary template, /*ITER_CONCEPT*/<I> denotes std::random_access_iterator_tag
- Otherwise, /*ITER_CONCEPT*/<I>
Semantic requirements
Let a
and b
be dereferenceable iterators and c
be a non-dereferenceable iterator of type I
such that b
is reachable from a
and c
is reachable from b
. The type I
models contiguous_iterator
- std::to_address (a) == std::addressof ( *a)
- std::to_address (b) == std::to_address (a) + std::iter_difference_t <I> (b - a)
- std::to_address (c) == std::to_address (a) + std::iter_difference_t <I> (c - a)
Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving
Implicit expression variations
A requires expression that uses an expression that is non-modifying for some constant lvalue operand also requires implicit expression variations
Notes
contiguous_iterator
is modeled by every pointer type to complete object type.
Iterator types in the standard library that are required to satisfy the
LegacyContiguousIterator
requirements in C++17 are also required to model contiguous_iterator
See also
(C++20)
|
specifies that a bidirectional_iterator is a random-access iterator, supporting advancement in constant time and subscripting (concept) |