std::contiguous_iterator

std::contiguous_iterator (연속 메모리 반복자 컨셉)

random_access_iterator를 정제해, 가리키는 요소들이 메모리에 연속해서 저장된다는 보장을 제공하는 컨셉이에요. C++20부터 있어요.

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

template< class I >
    concept contiguous_iterator =
        std::random_access_iterator<I> &&
        std::derived_from</*ITER_CONCEPT*/<I>, std::contiguous_iterator_tag> &&
        std::is_lvalue_reference_v<std::iter_reference_t<I>> &&
        std::same_as<std::iter_value_t<I>,
                     std::remove_cvref_t<std::iter_reference_t<I>>> &&
        requires(const I& i) {
            { std::to_address(i) } ->
              std::same_as<std::add_pointer_t<std::iter_reference_t<I>>>;
        };

contiguous_iterator 컨셉은 random_access_iterator를 정제해, 가리키는 요소들이 메모리에 연속해서 저장된다는 보장을 제공해요. contiguous_iterator를 모델링하는 타입의 반복자 i와 센티널 s, 비음수 정수 n이 있을 때:

  • 임의의 범위 [i, s)에 대해 표준 라이브러리 함수는 이를 [std::to_address(i), std::to_address(i + ranges::distance(i, s)))로 대체할 수 있어요.
  • 임의의 범위 i + [0, n)에 대해 표준 라이브러리 함수는 이를 [std::to_address(i), std::to_address(i + n))로 대체할 수 있어요.

즉 기본 포인터처럼 연속 메모리를 가리키는 것을 보장해요.

더 알아보기 (Learn more)

cppreference