std:: input_or_output_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<iterator>
|
||
|
template
<
class
I
>
concept input_or_output_iterator
=
|
(C++20부터) | |
input_or_output_iterator
개념은 반복자 개념 분류의 기초를 형성합니다. 모든 반복자 타입은
input_or_output_iterator
요구사항을 충족합니다.
설명 전용 개념 /*can-reference*/ 는 해당 타입이 referenceable 일 때에만 만족됩니다.
참고 사항
input_or_output_iterator
자체는 반복자의 역참조 및 증가 연산만을 명시합니다. 대부분의 알고리즘에는 추가 연산이 필요합니다, 예를 들어:
-
반복자와 센티널 비교 (참조:
sentinel_for); -
반복자로부터 값 읽기 (참조:
indirectly_readable및input_iterator); -
반복자에 값 쓰기 (참조:
indirectly_writable및output_iterator); -
더 풍부한 반복자 이동 연산 (참조:
forward_iterator,bidirectional_iterator,random_access_iterator).
LegacyIterator
요구사항과 달리,
input_or_output_iterator
개념은 복사 가능성을 요구하지 않습니다.
*
i
는 동등성 보존(equality-preserving)이 요구되지만,
weakly_incrementable
에서 요구하는 증분 연산은 그렇지 않습니다.
예제
최소 반복자.
#include <cstddef> #include <iterator> struct SimpleIterator { using difference_type = std::ptrdiff_t; int operator*(); SimpleIterator& operator++(); void operator++(int) { ++*this; } }; static_assert(std::input_or_output_iterator<SimpleIterator>);