JH-Toolkit v1.4.1
An engineering-oriented C++20 toolkit with duck-typed concepts, static design, async coroutines, and semantic containers — header-only, RTTI-free, and concurrency-friendly.
Loading...
Searching...
No Matches
jh::concepts::random_access_iterator Concept Reference

Concept for iterators supporting random access operations. More...

#include <jh/conceptual/iterator.h>

Concept definition

template<typename I, typename S = I>
// Can be compared
requires(const I a, const I b) {
{ a < b } -> std::convertible_to<bool>;
{ a > b } -> std::convertible_to<bool>;
{ a <= b } -> std::convertible_to<bool>;
{ a >= b } -> std::convertible_to<bool>;
// (forward) has already proven that == and != exist
} &&
requires(const I a, const I b) {
requires (!std::same_as<jh::concepts::iterator_difference_t<I>, void>);
} &&
requires(I i, const I j, const jh::concepts::iterator_difference_t<I> n) {
{ i += n } -> std::same_as<I &>;
{ i -= n } -> std::same_as<I &>;
{ j + n } -> std::same_as<I>;
{ n + j } -> std::same_as<I>;
{ j - n } -> std::same_as<I>;
{ j[n] } -> std::same_as<jh::concepts::iterator_reference_t<I>>;
}
Concept for iterators supporting bidirectional traversal.
Definition iterator.h:555
Concept for iterators supporting random access operations.
Definition iterator.h:593
typename detail::iterator_difference_impl< I >::type iterator_difference_t
Deduces the difference type of a duck-typed iterator.
Definition iterator.h:320

Detailed Description

Concept for iterators supporting random access operations.

  • Refines bidirectional_iterator, extending capabilities to constant-time positional access and arithmetic offset operations.
  • Requires full comparison support: <, >, <=, and >=. Equality and inequality are already guaranteed by forward_iterator.
  • Requires a valid iterator_difference_t type for distance computation between iterators.
  • Must support arithmetic and indexing: i += n, i -= n, j + n, n + j, j - n, and j[n].
  • An optional sentinel type S can be provided to check range consistency between begin() and end().
Template Parameters
IIterator-like type supporting random access and arithmetic operations.
SSentinel type used to verify consistency (defaults to I).