Namespaces
Variants

std::experimental::ranges:: BidirectionalIterator

From cppreference.net
헤더 파일에 정의됨 <experimental/ranges/iterator>
template < class I >

concept bool BidirectionalIterator =
ForwardIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: bidirectional_iterator_tag > &&
requires ( I i ) {
{ -- i } - > Same < I > & ;
{ i -- } - > Same < I > && ;

} ;
(ranges TS)

BidirectionalIterator<I> 개념은 ForwardIterator 를 반복자를 뒤로 이동할 수 있는 기능을 추가하여 정제합니다.

양방향 반복자 r 은 오직 어떤 s 가 존재하여 ++ s == r 를 만족할 때 감소 가능(decrementable) 하다고 말합니다. 모든 감소 가능한 반복자 r 은 표현식 -- r r -- 의 정의역에 속해야 합니다.

a b I 타입의 감소 가능한 객체라고 가정합니다. BidirectionalIterator<I> 는 다음 조건을 만족할 때에만 충족됩니다:

  • 선행 감소는 피연산자를 참조하는 좌측값을 산출합니다: std:: addressof ( -- a ) == std:: addressof ( a ) .
  • 후행 감소는 피연산자의 이전 값을 산출합니다: 만약 bool ( a == b ) 이라면, bool ( a -- == b ) 입니다.
  • 후행 감소와 선행 감소는 피연산자에 동일한 수정을 수행합니다: 만약 bool ( a == b ) 이라면, a -- -- b 를 모두 평가한 후에도 bool ( a == b ) 이 여전히 성립합니다.
  • 증가와 감소는 서로 역연산 관계입니다:
  • 만약 a 가 증가 가능하고 bool ( a == b ) 라면, bool ( -- ( ++ a ) == b ) 입니다.
  • 만약 bool ( a == b ) 라면, bool ( ++ ( -- a ) == b ) 입니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존(equality preserving) 합니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과와 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체에 대한 이러한 표현식의 두 평가는 해당 입력 객체에 대한 명시적인 중간 수정이 없는 경우 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.