std::input_iterator

std::input_iterator (입력 반복자 컨셉)

input_or_output_iterator를 정제해, 참조된 값을 읽을 수 있고 반복자 컨셉 태그가 있다는 요구사항을 추가하는 컨셉이에요. C++20부터 있어요.

출처: cppreference

본문

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

template< class I >
    concept input_iterator =
        std::input_or_output_iterator<I> &&
        std::indirectly_readable<I> &&
        requires { typename /*ITER_CONCEPT*/<I>; } &&
        std::derived_from</*ITER_CONCEPT*/<I>, std::input_iterator_tag>;

input_iterator 컨셉은 input_or_output_iterator를 정제해, 참조된 값을 읽을 수 있고(indirectly_readable을 통해), 반복자 컨셉 태그가 있다는 요구사항을 추가해요.

반복자 컨셉 결정

이 컨셉의 정의는 exposition-only 별칭 템플릿 /*ITER_CONCEPT*/으로 명세돼요. /*ITER_CONCEPT*/<I>를 결정하기 위해 ITER_TRAITS<I>가 기본 템플릿에서 생성된 std::iterator_traits<I> 특수화면 I를, 아니면 std::iterator_traits<I>를 나타낸다고 하자:

  • ITER_TRAITS<I>::iterator_concept이 유효하고 타입을 가리키면, /*ITER_CONCEPT*/<I>는 그 타입을 나타내요.
  • 그 외에 ITER_TRAITS<I>::iterator_category가 유효하고 타입을 가리키면, /*ITER_CONCEPT*/<I>는 그 타입을 나타내요. (이후 규칙도 이어짐.)

더 알아보기 (Learn more)

cppreference