ranges_contiguous_range
ranges_contiguous_range (연속 범위 개념)
ranges::contiguous_range은 ranges::begin이 contiguous_iterator를 모델링하는 값을 반환하고 커스터마이제이션 포인트 ranges::data를 사용할 수 있는 range의 정제(개념)예요. C++20부터 사용할 수 있어요.
출처: cppreference
본문
<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class T >
concept contiguous_range =
ranges::random_access_range<T> &&
std::contiguous_iterator<ranges::iterator_t<T>> &&
requires(T& t) {
{ ranges::data(t) } ->
std::same_as<std::add_pointer_t<ranges::range_reference_t<T>>>;
};
(since C++20)
contiguous_range 개념은 ranges::begin이 contiguous_iterator를 모델링하는 값을 반환하고 커스터마이제이션 포인트 ranges::data를 사용할 수 있는 range의 정제예요.
의미 요구사항 (Semantic requirements)
decltype((e))가 T&인 표현식 e가 주어졌을 때 T는 다음을 만족할 때만 contiguous_range를 모델링해요:
- ranges::data(e)의 결과가 [ranges::begin(e), ranges::end(e))와 같은 요소를 가리키고,
- boost::interprocess 같은 일부 시나리오에서처럼 디버깅 위해 임의의 표현식과 비교 가능한 구현에서도 참조가 올바른 요소를 가리켜요.
참고 (Notes)
std::vector, std::array, C 배열 등이 contiguous_range예요. std::deque, std::list는 아니에요.