FreeBSD Manual Pages
std::random...ess_iterator(3) C++ Standard Libarystd::random...ess_iterator(3) NAME std::random_access_iterator - std::random_access_iterator Synopsis Defined in header <iterator> template< class I > concept random_access_iterator = std::bidirectional_iterator<I> && std::derived_from</*ITER_CONCEPT*/<I>, std::random_access_iterator_tag> && std::totally_ordered<I> && std::sized_sentinel_for<I, I> && requires(I i, const I j, const std::iter_difference_t<I> n) { (since C++20) { i += n } -> std::same_as<I&>; { j + n } -> std::same_as<I>; { n + j } -> std::same_as<I>; { i -= n } -> std::same_as<I&>; { j - n } -> std::same_as<I>; { j[n] } -> std::same_as<std::iter_reference_t<I>>; }; The concept random_access_iterator refines bidirectional_iterator by adding support for constant time advancement with the +=, +, -=, and - operators, constant time computation of distance with -, and array notation with subscripting []. Notes Unlike the LegacyRandomAccessIterator requirements, the random_ac- cess_iterator concept does not require dereference to return an lvalue. Example Demonstrates a possible implementation of std::distance via C++20 concepts. // Run this code #include <iterator> namespace cxx20 { template<std::input_or_output_iterator Iter> constexpr std::iter_difference_t<Iter> distance(Iter first, Iter last) { if constexpr(std::random_access_iterator<Iter>) return last - first; else { std::iter_difference_t<Iter> result{}; for (; first != last; ++first) ++result; return result; } } } int main() { static constexpr auto il = {3, 1, 4}; static_assert(std::random_access_iterator<decltype(il.begin())> && cxx20::distance(il.begin(), il.end()) == 3 && cxx20::distance(il.end(), il.begin()) == -3); } See also bidirectional_iterator specifies that a forward_iterator is a bidi- rectional (C++20) iterator, supporting movement backwards (concept) contiguous_iterator specifies that a random_access_iterator is a contiguous (C++20) iterator, referring to elements that are con- tiguous in memory (concept) http://cppreference.com 2024.06.10 std::random...ess_iterator(3)
NAME | Synopsis | Notes | Example | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::random_access_iterator&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
