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예요.