Namespaces
Variants

C++ named requirements: LegacyBidirectionalIterator

From cppreference.net
C++ named requirements

LegacyBidirectionalIterator 는 양방향으로 이동(즉, 증가 및 감소)할 수 있는 LegacyForwardIterator 입니다.

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

목차

요구사항

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

그리고, 주어진

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

표현식 반환값 동등한 표현식 주의사항
-- a It& 사전 조건:
  • a 가 감소 가능해야 함 ( a == ++ b 를 만족하는 b 가 존재함)

사후 조건:

  • a 역참조 가능
  • -- ( ++ a ) == a
  • 만약 -- a == -- b 이면 a == b
  • a -- a 는 동일한 iterator 객체를 지정함
a -- const It & 로 변환 가능 It temp = a ;

-- a ;

return temp ;
* a -- reference

mutable LegacyBidirectionalIterator LegacyBidirectionalIterator 에 추가적으로 LegacyOutputIterator 요구 사항을 만족하는 반복자입니다.

참고 사항

begin 반복자는 감소 가능하지 않으며, -- container. begin ( ) 가 평가될 경우 동작은 정의되지 않습니다.

양방향 반복자는 역참조 가능하지 않아도 감소 가능할 수 있습니다(특히, 끝 반복자는 역참조 가능하지 않지만 감소 가능합니다).

Concept

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

template < class I >

concept __LegacyBidirectionalIterator =
__LegacyForwardIterator < I > && requires ( I i )
{
{ -- i } - > std:: same_as < I & > ;
{ i -- } - > std:: convertible_to < const I & > ;
{ * i -- } - > std:: same_as < std:: iter_reference_t < I >> ;

} ;

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

(C++20부터)

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 299
( N3066 )
C++98 * a -- 의 반환 타입이
T 로 변환 가능해야 했음
반환 타입을
reference 로 변경 [1]
LWG 383 C++98 b -- a 이후에 역참조 가능해야 했음 a 가 역참조 가능해야 함
LWG 1212
( N3066 )
C++98 * a -- 의 반환 타입이
LegacyForwardIterator 에서 요구하는 * a ++ 의 반환 타입과 일치하지 않았음
반환 타입을
reference 로 변경
  1. 이 문제는 처음에 N2758 (iterator concepts)에 의해 해결되었으나, 이후 C++ 표준에서 제외되었습니다.

참고 항목

forward_iterator 가 역방향 이동을 지원하는 양방향 반복자임을 명시함
(컨셉)
Iterator library 반복자, 반복자 특성, 어댑터 및 유틸리티 함수에 대한 정의를 제공함