Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

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

concept bool WeaklyIncrementable =
Semiregular < I > &&
requires ( I i ) {
typename ranges :: difference_type_t < I > ;
requires SignedIntegral < ranges :: difference_type_t < I >> ;
{ ++ i } - > Same < I > & ; /* not required to be equality preserving */
i ++ ; /* not required to be equality preserving */

} ;
(ranges TS)

WeaklyIncrementable<I> 개념은 (전위 및 후위 증가 연산자로) 증가시킬 수 있는 타입의 요구 사항을 명시합니다. 증가 연산은 동등성 보존(equality-preserving)일 필요가 없으며, 해당 타입은 EqualityComparable 일 필요가 없습니다.

i I 타입의 객체라고 하자. i 가 전위 증가와 후위 증가의 정의역에 모두 속할 때, 증가 가능(incrementable) 하다고 말한다. WeaklyIncrementable<I> 는 다음 조건을 만족할 때만 충족된다:

  • ++ i i ++ 는 동일한 도메인을 가집니다;
  • 만약 i 가 증가 가능하다면:
    • ++ i i ++ 모두 i 를 다음 요소로 진행시킵니다; 그리고
    • ++ i i 와 동일한 객체를 참조합니다.

동등성 보존

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

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

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

참고 사항

WeaklyIncrementable 타입의 경우, a b 와 같다고 해서 ++ a ++ b 와 같다는 것을 의미하지는 않습니다. 이러한 타입에 대한 알고리즘은 단일 패스(single pass)로 동작해야 하며 동일한 값을 두 번 이상 통과하려는 시도를 절대 해서는 안 됩니다.