Namespaces
Variants

std:: contiguous_iterator

From cppreference.net
Iterator library
Iterator concepts
contiguous_iterator
(C++20)


Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더에 정의됨 <iterator>
(C++20부터)

contiguous_iterator 개념은 random_access_iterator 를 개선하여 표시된 요소들이 메모리에서 연속적으로 저장된다는 보장을 제공합니다.

contiguous_iterator 를 모델하는 타입의 반복자 i , 센티넬 s , 그리고 음수가 아닌 정수 n 이 주어졌을 때:

이는 프로그램이 연속 반복자 i 의 역참조, 증가, 감소 연산의 부수 효과에 의존할 수 없음을 의미합니다. 표준 라이브러리 함수들이 std:: to_address ( i ) 로 얻은 포인터를 통해 동작할 수 있기 때문입니다.

(C++26부터)

목차

반복자 개념 결정

이 개념의 정의는 전시 전용(exposition-only) 별칭 템플릿 /*ITER_CONCEPT*/ 을 통해 명시됩니다.

/*ITER_CONCEPT*/ < I > 를 결정하기 위해, ITER_TRAITS < I > 를 다음과 같이 정의합니다: I 만약 std:: iterator_traits < I > 특수화가 기본 템플릿으로부터 생성된 경우, 그렇지 않으면 std:: iterator_traits < I > 입니다:

  • ITER_TRAITS < I > :: iterator_concept 이 유효하고 타입을 명시하는 경우, /*ITER_CONCEPT*/ < I > 은 해당 타입을 나타냅니다.
  • 그렇지 않고 ITER_TRAITS < I > :: iterator_category 이 유효하고 타입을 명시하는 경우, /*ITER_CONCEPT*/ < I > 은 해당 타입을 나타냅니다.
  • 그렇지 않고 std:: iterator_traits < I > 이 기본 템플릿으로부터 생성된 경우, /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag 을 나타냅니다.
    (즉, std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: contiguous_iterator_tag > false 라고 가정됩니다.)
  • 그 외의 경우, /*ITER_CONCEPT*/ < I > 은 타입을 나타내지 않으며 치환 실패를 발생시킵니다.

의미론적 요구사항

a b 역참조 가능한(dereferenceable) 반복자로, c I 타입의 역참조 불가능한(non-dereferenceable) 반복자로 가정할 때, b a 로부터 도달 가능(reachable) 하고 c b 로부터 도달 가능할 경우, 타입 I 는 다음의 모든 조건이 충족되고 그것이 포함하는 모든 개념이 모델링된 경우에만 contiguous_iterator 를 모델링합니다:

동등성 보존

표준 라이브러리 개념의 requires expressions 에 선언된 표현식들은 equality-preserving 해야 합니다(다르게 명시된 경우를 제외하고).

암시적 표현 변형

상수 lvalue 피연산자에 대해 수정하지 않는 표현식을 사용하는 requires expression 는 또한 implicit expression variations 를 요구합니다.

참고 사항

contiguous_iterator 는 완전한 객체 타입에 대한 모든 포인터 타입에 의해 모델링됩니다.

표준 라이브러리의 반복자 유형 중 C++17에서 LegacyContiguousIterator 요구 사항을 충족해야 하는 것들은 C++20에서도 contiguous_iterator 를 모델링해야 합니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 3607 C++20 contiguous_iterator 가 사용자 정의
ranges::iter_move ranges::iter_swap 동작을 가질 수 있었음
금지됨
LWG 4170 C++20 값 초기화된 contiguous_iterator 쌍이
빈 범위를 표현하지 못할 수 있었음
보장됨

참고 항목

bidirectional_iterator 가 상수 시간 내 전진 및 첨자 연산을 지원하는 임의 접근 반복자임을 명시
(컨셉)