Namespaces
Variants

std:: input_iterator

From cppreference.net
Iterator library
Iterator concepts
input_iterator
(C++20)

Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더 파일에 정의됨 <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 > ;
(C++20 이후)

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 > 는 해당 타입을 나타냅니다.
  • 그렇지 않고 std:: iterator_traits < I > 이 기본 템플릿으로부터 생성된 경우, /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag 을 나타냅니다.
    (즉, std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: input_iterator_tag > true 라고 가정됩니다.)
  • 그 외의 경우, /*ITER_CONCEPT*/ < I > 는 타입을 나타내지 않으며 치환 실패를 발생시킵니다.

참고 사항

LegacyInputIterator 요구사항과 달리, input_iterator 개념은 equality_comparable 를 요구하지 않습니다. 이는 입력 반복자(input iterator)가 일반적으로 센티넬(sentinel)과 비교되기 때문입니다.

예제

최소 입력 반복자.

#include <cstddef>
#include <iterator>
class SimpleInputIterator
{
public:
    using difference_type = std::ptrdiff_t;
    using value_type = int;
    int operator*() const;
    SimpleInputIterator& operator++();
    void operator++(int) { ++*this; }
};
static_assert(std::input_iterator<SimpleInputIterator>);

참고 항목

해당 타입의 객체가 증가 및 역참조될 수 있음을 명시
(concept)
input_iterator 가 전방 반복자임을 명시하며, 동등 비교와 다중 패스를 지원함
(concept)