Namespaces
Variants

std::ranges:: range

From cppreference.net
Ranges library
Range adaptors
헤더 파일에 정의됨 <ranges>
template < class T >

concept range = requires ( T & t ) {
ranges:: begin ( t ) ; // equality-preserving for forward iterators
ranges:: end ( t ) ;

} ;
(C++20부터)

range 개념은 반복자와 범위의 끝을 나타내는 센티넬을 제공하여 해당 범위의 요소들에 대한 순회를 가능하게 하는 타입의 요구사항을 정의합니다.

목차

의미론적 요구사항

주어진 표현식 E 에 대해 decltype ( ( E ) ) T 일 때, T range 를 모델링하려면 다음 조건을 만족해야 합니다

참고 사항

일반적인 range 클래스는 단 두 개의 함수만 제공하면 됩니다:

  1. begin() 멤버 함수로, 반환 타입이 input_or_output_iterator 개념을 만족해야 합니다.
  2. end() 멤버 함수로, 반환 타입이 sentinel_for <It> 개념을 만족해야 합니다. 여기서 It begin() 의 반환 타입입니다.

또는, 이들은 비멤버 함수일 수 있으며 인수 의존적 탐색 에 의해 발견될 수 있습니다.

예제

#include <ranges>
// 최소 범위
struct SimpleRange
{
    int* begin();
    int* end();
};
static_assert(std::ranges::range<SimpleRange>);
// 범위가 아님: begin/end 없음
struct NotRange
{
    int t {};
};
static_assert(!std::ranges::range<NotRange>);
// 범위가 아님: begin이 input_or_output_iterator를 반환하지 않음
struct NotRange2
{
    void* begin();
    int* end();
};
static_assert(!std::ranges::range<NotRange2>);
int main() {}

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 3915 C++20 ranges:: begin ( t ) ranges:: end ( t )
암시적 표현 변형을 요구하지 않았음
중복된 설명을
제거함