Namespaces
Variants

std::experimental::ranges:: RandomAccessIterator

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

concept bool RandomAccessIterator =
BidirectionalIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: random_access_iterator_tag > &&
StrictTotallyOrdered < I > &&
SizedSentinel < I, I > &&
requires ( I i, const I j, const ranges :: difference_type_t < I > n ) {
{ i + = n } - > Same < I > & ;
{ j + n } - > Same < I > && ;
{ n + j } - > Same < I > && ;
{ i - = n } - > Same < I > & ;
{ j - n } - > Same < I > && ;
j [ n ] ;
requires Same < decltype ( j [ n ] ) , ranges :: reference_t < I >> ;

} ;
(ranges TS)

RandomAccessIterator<I> 개념은 BidirectionalIterator 를 정제하여 += , + , -= , - 연산자를 통한 상수 시간 이동 지원, - 연산자를 통한 상수 시간 거리 계산, 그리고 첨자 연산을 통한 배열 표기법을 추가로 지원합니다.

a b b a 에서 도달 가능한 유효한 I 타입의 반복자이고, n ranges :: difference_type_t < I > 타입의 값으로 b - a 와 동일하다고 가정합니다. RandomAccessIterator<I> 는 다음 조건을 만족할 때에만 충족됩니다:

  • ( a + = n ) b 와 같습니다.
  • std:: addressof ( a + = n ) std:: addressof ( a ) 와 같습니다.
  • ( a + n ) ( a + = n ) 와 같습니다.
  • ( a + n ) ( n + a ) 와 같습니다.
  • 임의의 두 양의 정수 x y 에 대해, a + ( x + y ) 가 유효하다면, a + ( x + y ) ( a + x ) + y 와 같습니다.
  • a + 0 a 와 같습니다.
  • 만약 ( a + ( n - 1 ) ) 가 유효하다면, -- b ( a + ( n - 1 ) ) 와 같습니다.
  • ( b + = - n ) ( b - = n ) 모두 a 와 같습니다.
  • std:: addressof ( b - = n ) std:: addressof ( b ) 와 같습니다.
  • ( b - n ) ( b - = n ) 와 같습니다.
  • 만약 b 가 역참조 가능하다면, a [ n ] 는 유효하며 * b 와 같습니다.
  • bool ( a <= b ) true 입니다.

동등성 보존

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

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

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체로 이러한 표현식을 두 번 평가할 때, 해당 입력 객체에 명시적인 수정이 개입되지 않는 한 동일한 출력을 가져야 합니다.

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

암시적 표현 변형

어떤 상수 lvalue 피연산자에 대해 수정하지 않는 표현식을 사용하는 requires-expression 은 해당 피연산자에 대해 비상수 lvalue 또는 (가능하다면 상수) rvalue를 허용하는 해당 표현식의 추가 변형을 암시적으로 요구합니다. 단, 이러한 표현식 변형이 다른 의미론으로 명시적으로 요구된 경우는 제외됩니다. 이러한 암시적 표현식 변형 은 선언된 표현식의 동일한 의미론적 요구사항을 충족해야 합니다. 구현이 이러한 변형들의 구문을 검증하는 범위는 명시되지 않습니다.