C++ named requirements: LegacyOutputIterator
LegacyOutputIterator 는 가리키는 요소에 기록할 수 있는 LegacyIterator 입니다.
LegacyOutputIterator 를 구현하는 타입의 예시로는 std::ostream_iterator 가 있습니다.
LegacyForwardIterator , LegacyBidirectionalIterator , 또는 LegacyRandomAccessIterator 가 자체 요구사항에 추가로 LegacyOutputIterator 요구사항을 만족할 경우, 이를 mutable 이라고 설명합니다.
목차 |
요구사항
타입 X 는 다음 조건을 만족할 때 LegacyOutputIterator 를 만족합니다
- 타입 X 가 LegacyIterator 를 만족함
- X 는 클래스 타입 또는 포인터 타입임
그리고, 주어진
-
o
, 출력 반복자에 기록 가능한 어떤 타입의 값 (여러 타입이 기록 가능할 수 있음, 예를 들어
operator
=
이 템플릿일 수 있음. 입력 반복자와 같은
value_type개념이 존재하지 않음) - r , X 타입의 lvalue,
다음 표현식들은 유효해야 하며 지정된 효과를 가져야 합니다
| 표현식 | 반환값 | 동등한 표현식 | 사전 조건 | 사후 조건 | 참고 사항 |
|---|---|---|---|---|---|
| * r = o | (사용되지 않음) | r 역참조 가능 | r 증가 가능 | 이 연산 후 r 은 역참조 가능할 필요가 없으며, r 의 이전 값 복사본들은 더 이상 역참조 가능하거나 증가 가능할 필요가 없습니다. | |
| ++ r | X & | r 증가 가능 | r 과 ++ r 는 동일한 반복자 객체를 지정하며, r 는 역참조 가능하거나 past-the-end 상태임 | 이 연산 후 r 는 증가 가능할 필요가 없으며, r 의 이전 값 복사본들은 더 이상 역참조 가능하거나 증가 가능할 필요가 없습니다. | |
| r ++ | 변환 가능 const X & |
X temp
=
r
;
++
r
;
|
|||
| * r ++ = o | (사용되지 않음) |
*
r
=
o
;
++ r ; |
참고 사항
출력 반복자와 함께 operator * 의 유일한 올바른 사용법은 대입 연산자의 왼쪽에 위치하는 것입니다: operator * 는 프록시 객체를 반환할 수 있으며, 이는 멤버 operator = (템플릿일 수 있음)를 정의합니다.
출력 반복자에 대해서는 동등성과 비동등성이 정의되지 않을 수 있습니다. operator == 가 정의되어 있더라도, x == y 가 ++ x == ++ y 를 함의하지는 않을 수 있습니다.
동일한 출력 반복자 값에 대한 할당은 한 번만 발생합니다: 출력 반복자에 대한 알고리즘은 단일 패스 알고리즘이어야 합니다.
출력 반복자를 통한 할당은 증가와 번갈아 수행될 것으로 예상됩니다. 이중 증가는 정의되지 않은 동작입니다(C++ 표준은 현재 STL 문서와 반대로 이중 증가가 지원된다고 명시하고 있으며, 이는 LWG 이슈 2035 에 해당합니다).
순수 출력 전용 반복자는
iterator_traits
<
X
>
::
value_type
,
iterator_traits
<
X
>
::
difference_type
,
iterator_traits
<
X
>
::
pointer
, 그리고
iterator_traits
<
X
>
::
reference
를
void
로 선언하는 것이 허용됩니다
(
std::back_insert_iterator
와 같은 반복자들이 바로 그렇게 합니다
difference_type
을 제외하고, 이제는
std::output_iterator
를 충족하도록 정의됩니다
(C++20부터)
).
표준 라이브러리
다음 표준 라이브러리 반복자들은 전방 반복자가 아닌 출력 반복자입니다:
|
std::basic_ostream
에 쓰기를 수행하는 출력 반복자
(클래스 템플릿) |
|
|
std::basic_streambuf
에 쓰기를 수행하는 출력 반복자
(클래스 템플릿) |
|
|
컨테이너에 삽입하기 위한 반복자 어댑터
(클래스 템플릿) |
|
|
컨테이너의 끝에 삽입하기 위한 반복자 어댑터
(클래스 템플릿) |
|
|
컨테이너의 앞에 삽입하기 위한 반복자 어댑터
(클래스 템플릿) |
참고 항목
|
(C++20)
|
주어진 값 타입에 대해 해당 타입이 출력 반복자임을 명시합니다. 즉, 해당 타입의 값을 쓸 수 있으며 사전 증가와 사후 증가가 모두 가능함
(concept) |
| Iterator library | 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공합니다 |