std::contiguous_iterator
std::contiguous_iterator (연속 메모리 반복자 컨셉)
random_access_iterator를 정제해, 가리키는 요소들이 메모리에 연속해서 저장된다는 보장을 제공하는 컨셉이에요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
template< class I >
concept contiguous_iterator =
std::random_access_iterator<I> &&
std::derived_from</*ITER_CONCEPT*/<I>, std::contiguous_iterator_tag> &&
std::is_lvalue_reference_v<std::iter_reference_t<I>> &&
std::same_as<std::iter_value_t<I>,
std::remove_cvref_t<std::iter_reference_t<I>>> &&
requires(const I& i) {
{ std::to_address(i) } ->
std::same_as<std::add_pointer_t<std::iter_reference_t<I>>>;
};
contiguous_iterator 컨셉은 random_access_iterator를 정제해, 가리키는 요소들이 메모리에 연속해서 저장된다는 보장을 제공해요. contiguous_iterator를 모델링하는 타입의 반복자 i와 센티널 s, 비음수 정수 n이 있을 때:
- 임의의 범위 [i, s)에 대해 표준 라이브러리 함수는 이를 [std::to_address(i), std::to_address(i + ranges::distance(i, s)))로 대체할 수 있어요.
- 임의의 범위 i + [0, n)에 대해 표준 라이브러리 함수는 이를 [std::to_address(i), std::to_address(i + n))로 대체할 수 있어요.
즉 기본 포인터처럼 연속 메모리를 가리키는 것을 보장해요.