Namespaces
Variants

크기-지정-임의-접근-범위

cppreference.net에서
 
 
범위 라이브러리
범위 어댑터
 


template< class T >
concept /*sized-random-access-range*/ =
    ranges::random_access_range<T> &&
    ranges::sized_range<T>;
(C++26 이후)
(설명 전용*)

설명 전용 개념 sized-random-access-range은(는) 자신의 크기를 상수 시간에 알고 요소에 대한 임의 접근을 허용하는 범위 유형에 대한 요구 사항을 지정합니다.

참고 사항

sized-random-access-range은(는) 병렬 범위 알고리즘에서 무제한 범위 인수를 거부하는 데 사용됩니다. 그 이유는 다음과 같습니다:

  • 효율적인 병렬 구현을 위해서는 반복 공간의 경계를 알아야 합니다. 그렇지 않으면 여러 실행 스레드에 대한 작업을 생성하는 "분할 정복" 전략을 적용하기 어렵습니다.
  • 직렬 범위 알고리즘은 std::ranges::views::iota(0)과 같은 "무한" 범위 전달을 허용하지만, 이는 무한 루프로 이어질 수 있습니다. 병렬 실행의 경우 이것이 유용할 것이라고 상상하기 어렵습니다. 데이터 시퀀스를 유계로 요구하면 런타임 오류를 잠재적으로 방지할 수 있습니다.
  • 명시적으로 범위가 지정된 출력 범위를 사용하는 것은 범위를 벗어난 데이터 수정을 방지하기 위해 출력 크기를 항상 지정할 것을 권장하거나 심지어 요구하는 안전한 코딩의 확립된 관행을 따릅니다.
  • 여러 입력 범위 또는 시퀀스가 유계인 경우, 알고리즘은 일반적으로 가장 짧은 것의 끝에 도달하자마자 중단해야 합니다. 알고리즘이 잠재적으로 다른 입력 크기를 가진 두 개의 시퀀스를 취하고 더 작은 크기를 수행할 반복 횟수로 선택하는 선례가 표준에 이미 있습니다(예: std::ranges::transform 및 std::ranges::mismatch).
  • 출력 데이터 시퀀스가 범위가 지정되었으므로 모든 입력에 대해 충분한 공간이 있다고 더 이상 가정하지 않습니다. 따라서 알고리즘에 의해 입력 시퀀스의 일부 요소가 처리되지 않을 가능성이 있으며, 알고리즘이 처리가 중단된 해당 시퀀스의 위치에 대한 반복자를 반환하는 것이 합리적입니다.