Namespaces
Variants

C++ named requirements: LegacyRandomAccessIterator

From cppreference.net
C++ named requirements

LegacyRandomAccessIterator 는 상수 시간 내에 임의의 요소를 가리키도록 이동할 수 있는 LegacyBidirectionalIterator 입니다.

만약 LegacyRandomAccessIterator it Container 에서 비롯된 경우, it value_type 은 컨테이너의 것과 동일하므로, 역참조( * it )를 통해 컨테이너의 value_type 을 얻을 수 있습니다.

배열 요소에 대한 포인터는 LegacyRandomAccessIterator 의 모든 요구 사항을 충족합니다.

목차

요구사항

타입 It 는 다음 조건을 만족할 때 LegacyRandomAccessIterator 를 만족합니다

그리고, 주어진

  • value_type , std:: iterator_traits < It > :: value_type 로 표시되는 타입
  • difference_type , std:: iterator_traits < It > :: difference_type 로 표시되는 타입
  • reference , std:: iterator_traits < It > :: reference 로 표시되는 타입
  • i , a , b , It 또는 const It 타입의 객체들
  • r , It 타입의 lvalue
  • n , difference_type 타입의 정수

다음 표현식들은 유효해야 하며 지정된 효과를 가져야 합니다:

번역 시 주의사항: - HTML 태그와 속성은 그대로 유지 - ` `, `
`, `` 태그 내부 텍스트는 번역하지 않음
- C++ 관련 용어(boolean-testable, BooleanTestable)는 원문 유지
- "meets" → "요구사항을 충족함", "models" → "개념을 모델링함"으로 전문적인 번역 적용
- 괄호 안의 버전 정보는 자연스러운 한국어 표현으로 변환
표현식 반환 타입 연산 의미론 참고 사항
r + = n It& difference_type m = n ;

if ( m >= 0 ) while ( m -- ) ++ r ;
else while ( m ++ ) -- r ;
return r ;

  • n 양수 또는 음수 모두 가능
  • 복잡도는 상수입니다 (즉, 구현체는 실제로 동작 의미론에 표시된 while 루프를 실행할 수 없음)
a + n

n + a

It It temp = a ;

return temp + = n ;

  • n 은 양수 또는 음수 모두 가능합니다
  • a + n == n + a
r - = n It& return r + = - n ; n 의 절대값은 difference_type 의 표현 가능한 값 범위 내에 있어야 합니다.
i - n It It temp = i ;
return temp - = n ;
b - a difference_type return n ;
(전제조건 참조)

전제조건:

  • difference_type 타입의 값 n 이 존재하여 a + n == b 를 만족함

사후조건:

  • b == a + ( b - a ) .
i [ n ] reference 로 변환 가능 * ( i + n )
a < b

BooleanTestable 요구사항을 충족함

(C++20 이전)

boolean-testable 개념을 모델함

(C++20 이후)
다음 표현식과 동등함 return b - a > 0 ; 사전 조건:
  • b - a 과 동일함

엄격한 전체 순서 관계:

  • ! ( a < a )
  • 만약 a < b 이면 ! ( b < a )
  • 만약 a < b 이고 b < c 이면 a < c
  • a < b 또는 b < a 또는 a == b
    (정확히 하나의 표현식만 참임)
a > b

BooleanTestable 요구사항을 충족함

(C++20 이전)

boolean-testable 개념을 모델함

(C++20 이후)
b < a a < b 의 반대인 전체 순서 관계
a >= b

BooleanTestable 요구사항을 충족함

(C++20 이전)

boolean-testable 개념을 모델함

(C++20 이후)
! ( a < b )
a <= b

BooleanTestable 요구사항을 충족함

(C++20 이전)

boolean-testable 개념을 모델링함

(C++20 이후)
! ( a > b )

위 규칙들은 LegacyRandomAccessIterator LessThanComparable 도 구현함을 의미합니다.

mutable LegacyRandomAccessIterator 는 추가적으로 LegacyOutputIterator 요구사항을 충족하는 LegacyRandomAccessIterator 입니다.

개념(Concept)

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

template < class I >

concept __LegacyRandomAccessIterator =
__LegacyBidirectionalIterator < I > && std:: totally_ordered < I > &&
requires ( I i, typename std:: incrementable_traits < I > :: difference_type n )
{
{ i + = n } - > std:: same_as < I & > ;
{ i - = n } - > std:: same_as < I & > ;
{ i + n } - > std:: same_as < I > ;
{ n + i } - > std:: same_as < I > ;
{ i - n } - > std:: same_as < I > ;
{ i - i } - > std:: same_as < decltype ( n ) > ;
{ i [ n ] } - > std:: convertible_to < std:: iter_reference_t < I >> ;

} ;

여기서 설명 전용 개념 __LegacyBidirectionalIterator LegacyBidirectionalIterator 에 설명되어 있습니다.

(C++20 이후)

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 299
( N3066 )
C++98 a [ n ] 의 반환 타입이
const value_type & 로 변환 가능해야 했음
반환 타입이
reference 로 변환 가능해야 함
LWG 448 C++98 a [ n ] 의 반환 타입이
value_type 로 변환 가능해야 했음
반환 타입이
const value_type & 로 변환 가능해야 함 [1]
LWG 1079 C++98 b - a a < b 를 사용하여 정의됨,
순환 정의가 발생했음
정의에서 a < b 를 제거함
LWG 2114
( P2167R3 )
C++98 bool 로의 변환 가능성이 구현의 기대를 반영하기에 너무 약했음 요구 사항이 강화됨
  1. LWG issue 299 이 해결 이후 다시 열렸습니다.

참고 항목

bidirectional_iterator 가 상수 시간 내 전진 및 첨자 연산을 지원하는 임의 접근 반복자임을 명시함
(컨셉)
반복자 라이브러리 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공함