Namespaces
Variants

C++ named requirements: LegacyIterator

From cppreference.net
C++ named requirements

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 의 동작이 정의됨)

Concept

std::iterator_traits 의 정의를 위해 다음의 설명 전용( exposition-only ) 개념이 정의됩니다.

template < class I >

concept __LegacyIterator =
requires ( I i )
{
{ * i } - > __Referenceable ;
{ ++ i } - > std:: same_as < I & > ;
{ * i ++ } - > __Referenceable ;

} && std:: copyable < I > ;

여기서 설명 전용( exposition-only ) 개념 __Referenceable < T > T & 가 유효한 타입인 경우에만 만족됩니다 (특히, T void 일 수 없습니다).

(since C++20)

참고 사항

용어 관련 참고사항: 다음 표는 이 사이트에서 사용하는 이름과 해당하는 C++ 표준 이름(동일한 의미)을 보여줍니다. "Legacy" (및 "Cpp17") 접두사는 C++20 이전 표준과의 호환성을 강조하며, C++20에서 도입된 새로운 iterator concepts 와 이러한 요구사항을 구분하기 위해 사용됩니다.

cppreference 명칭 C++ 표준 명칭 C++20 반복자 개념
LegacyIterator Cpp17Iterator input_or_output_iterator
LegacyInputIterator Cpp17InputIterator input_iterator
LegacyOutputIterator Cpp17OutputIterator output_iterator
LegacyForwardIterator Cpp17ForwardIterator forward_iterator
LegacyBidirectionalIterator Cpp17BidirectionalIterator bidirectional_iterator
LegacyRandomAccessIterator Cpp17RandomAccessIterator random_access_iterator
LegacyContiguousIterator [1] contiguous_iterator
  1. 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 이 확인됨

참고 항목

해당 타입의 객체가 증가 및 역참조될 수 있음을 명시
(concept)
Iterator library 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공