C++ named requirements: LegacyIterator
LegacyIterator 요구 사항은 컨테이너의 요소들을 식별하고 순회하는 데 사용할 수 있는 타입들을 설명합니다.
LegacyIterator 는 다른 반복자 타입들이 사용하는 기본 요구 사항 집합입니다: LegacyInputIterator , LegacyOutputIterator , LegacyForwardIterator , LegacyBidirectionalIterator , 그리고 LegacyRandomAccessIterator . 반복자는 포인터의 추상화로 생각할 수 있습니다.
반복자의 모든 카테고리는 상수 시간(분할 상환)에 실현 가능한 함수들만 요구합니다. 따라서 반복자에 대한 요구 사항 테이블 및 개념 정의 (since C++20) 는 복잡도를 명시하지 않습니다.
목차 |
요구사항
타입
It
는 다음 조건을 만족할 때
LegacyIterator
를 만족합니다
-
타입
It이 CopyConstructible 을 만족하며, -
타입
It이 CopyAssignable 을 만족하며, -
타입
It이 Destructible 을 만족하며, -
타입
It이 Swappable 을 만족하며, -
std::
iterator_traits
<
It
>
이 다음 멤버 typedef들을 가지고:
value_type, (until C++20)difference_type,reference,pointer, 그리고iterator_category, 그리고 -
타입
It의 lvalue인 r 이 주어졌을 때, 다음 표현식들이 유효하고 지정된 효과를 가져야 합니다:
| 표현식 | 반환 타입 | 사전 조건 |
|---|---|---|
| * r | unspecified | r 이 dereferenceable 함 |
| ++ r | It & | r 이 incrementable 함 (표현식 ++ r 의 동작이 정의됨) |
Conceptstd::iterator_traits 의 정의를 위해 다음의 설명 전용( exposition-only ) 개념이 정의됩니다.
여기서 설명 전용( exposition-only ) 개념
__Referenceable
<
T
>
는
T
&
가 유효한 타입인 경우에만 만족됩니다 (특히,
|
(since C++20) |
참고 사항
용어 관련 참고사항: 다음 표는 이 사이트에서 사용하는 이름과 해당하는 C++ 표준 이름(동일한 의미)을 보여줍니다. "Legacy" (및 "Cpp17") 접두사는 C++20 이전 표준과의 호환성을 강조하며, C++20에서 도입된 새로운 iterator concepts 와 이러한 요구사항을 구분하기 위해 사용됩니다.
- ↑ LegacyContiguousIterator 카테고리는 공식적으로 C++17에서만 명시되었지만, std::vector , std::basic_string , std::array , 그리고 std::valarray 의 반복자들과 C 배열에 대한 포인터들은 C++17 이전 코드에서 종종 별도의 카테고리로 취급되었습니다.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2437 | C++98 |
*
r
가
reference
여야 함
|
출력 반복자에 대해 요구되지 않음 |
| LWG 3420 | C++20 |
설명 전용 개념이
copyable
을 먼저 확인함
|
requires-expression이 true를 반환하는 경우에만
copyable
이 확인됨
|
참고 항목
|
(C++20)
|
해당 타입의 객체가 증가 및 역참조될 수 있음을 명시
(concept) |
| Iterator library | 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공 |