std:: input_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<iterator>
|
||
|
template
<
class
I
>
concept input_iterator
=
|
(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>);
참고 항목
|
(C++20)
|
해당 타입의 객체가 증가 및 역참조될 수 있음을 명시
(concept) |
|
(C++20)
|
input_iterator
가 전방 반복자임을 명시하며, 동등 비교와 다중 패스를 지원함
(concept) |