ranges_range

ranges_range (범위 개념)

ranges::range은 반복자와 센티널을 제공해 요소를 순회할 수 있게 하는 타입의 요구사항을 정의하는 개념이에요. C++20부터 사용할 수 있어요.

출처: cppreference

본문

<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

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

(since C++20)

range 개념은 범위의 요소를 나타내는 반복자와 센티널을 제공해 그 요소를 순회할 수 있게 하는 타입의 요구사항을 정의해요.

의미 요구사항 (Semantic requirements)

decltype((E))가 T인 표현식 E가 주어졌을 때, T는 다음을 만족할 때만 range를 모델링해요:

  • [ranges::begin(E), ranges::end(E))가 범위를 나타내고,
  • ranges::begin(E)와 ranges::end(E) 모두 분할 상환 상수 시간이고, equality-preserving 표현식에 관찰 가능한 방식으로 E 값을 변경하지 않으며,
  • ranges::begin(E)의 타입이 forward_iterator를 모델링하면 ranges::begin(E)는 equality-preserving이에요 (즉 forward 반복자는 다중 패스 알고리즘을 지원해요).

참고 (Notes)

일반적인 range 클래스는 요소 뷰를 제공해요. std::vector, std::list, std::string 등이 range이며, 배열도 range예요.

더 알아보기 (Learn more)

cppreference