std::random_access_iterator
std::random_access_iterator (임의 접근 반복자 컨셉)
bidirectional_iterator를 정제해 상수 시간 전진·거리 계산·배열 표기(subscript)를 지원하는 컨셉이에요. C++20부터 있어요.
출처: cppreference
본문
<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) {
{ 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>>;
};
random_access_iterator 컨셉은 bidirectional_iterator를 정제해 +=, +, -=, - 연산자로 상수 시간 전진, -로 상수 시간 거리 계산, 그리고 첨자 []로 배열 표기를 지원해요.
의미 요구사항
반복자·센티널·차이 값에 대해, j + n은 j에서 n만큼 전진한 위치를, j[n]은 *(j + n)을, j - i는 i에서 j까지의 홉 수를 돌려줘요. n이 음수면 j + n은 감소를 의미해요.