Namespaces
Variants

Extensions for ranges

From cppreference.net

C++ 범위 확장(ISO/IEC TS 21425:2017)은 핵심 언어에 대한 하나의 수정 사항을 명시하고 이 페이지에 나열된 C++ 표준 라이브러리의 새로운 구성 요소들을 정의합니다.

Ranges TS는 Concepts TS 에 의해 수정된 C++14 표준을 기반으로 합니다.

목차

핵심 언어 변경사항

Ranges TS는 범위 기반 for 루프 의 명세를 수정하여 서로 다른 타입의 begin과 end 반복자를 허용합니다. 이 변경은 센티넬(sentinel)의 사용을 가능하게 하며 C++17에도 동일하게 적용됩니다.

개념

핵심 언어 개념
다음 네임스페이스에 정의됨 std::experimental::ranges
한 타입이 다른 타입과 동일함을 명시함
(concept)
한 타입이 다른 타입으로부터 파생되었음을 명시
(concept)
한 타입이 다른 타입으로 암시적으로 변환 가능함을 명시
(concept)
두 타입이 공통 참조 타입을 공유함을 명시
(concept)
두 타입이 공통 타입을 공유함을 명시
(concept)
타입이 정수형 타입임을 명시함
(컨셉)
해당 타입이 부호 있는 정수형임을 명시합니다
(concept)
타입이 부호 없는 정수형임을 명시함
(컨셉)
한 타입이 다른 타입으로부터 할당 가능함을 명시
(concept)
타입이 교환 가능하거나 두 타입이 서로 교환될 수 있음을 명시함
(concept)
비교 개념
다음 네임스페이스에 정의됨 std::experimental::ranges
타입이 Boolean 컨텍스트에서 사용될 수 있음을 명시
(concept)
두 타입이 == ! = 연산자를 사용하여 동등 비교가 가능함을 명시함
(concept)
operator == 가 동치 관계임을 명시함
(concept)
해당 타입의 비교 연산자들이 완전 순서를 생성함을 명시
(concept)
객체 개념
정의된 네임스페이스 std::experimental::ranges
해당 타입의 객체가 파괴될 수 있음을 명시함
(concept)
해당 타입의 변수가 일련의 인자 타입들로부터 생성되거나 바인딩될 수 있음을 명시
(concept)
해당 타입의 객체가 기본 생성될 수 있음을 명시
(concept)
해당 타입의 객체가 이동 생성될 수 있음을 명시함
(concept)
특정 타입의 객체가 복사 생성 및 이동 생성될 수 있음을 명시
(concept)
특정 타입의 객체가 이동 및 교환될 수 있음을 명시
(concept)
해당 타입의 객체가 복사, 이동 및 스왑될 수 있음을 명시함
(concept)
해당 타입의 객체가 복사, 이동, 교환 및 기본 생성될 수 있음을 명시
(concept)
타입이 정규(regular)임을 지정하며, 이는 Semiregular 이면서 동시에 EqualityComparable 임을 의미합니다
(concept)
Callable 개념
네임스페이스에 정의됨 std::experimental::ranges
호출 가능 타입이 주어진 인수 타입 집합으로 호출될 수 있음을 명시
(concept)
호출 가능 타입이 부울 조건자임을 명시함
(concept)
호출 가능 타입이 이항 관계임을 명시함
(concept)
Relation 이 엄격한 약순서(strict weak ordering)를 부과함을 명시
(concept)
난수 생성기 개념
헤더에 정의됨 <experimental/ranges/random>
다음 네임스페이스에 정의됨 std::experimental::ranges
타입이 균일 난수 생성기로 적합함을 명시
(컨셉)

일반 유틸리티

유틸리티 컴포넌트
네임스페이스에 정의됨 std::experimental::ranges
두 객체의 값을 교환합니다
(커스터마이제이션 포인트 객체)
인수를 새 값으로 교체하고 이전 값을 반환합니다
(function template)
함수 객체
다음 네임스페이스에 정의됨 std::experimental::ranges
주어진 인자로 Callable 객체를 호출합니다
(함수 템플릿)
함수 객체 구현 x == y
(클래스 템플릿)
함수 객체 구현 x ! = y
(클래스 템플릿)
x > y 를 구현하는 함수 객체
(클래스 템플릿)
함수 객체 구현 x < y
(클래스 템플릿)
x >= y 를 구현하는 함수 객체
(클래스 템플릿)
함수 객체 구현 x <= y
(클래스 템플릿)
인수를 변경 없이 반환하는 함수 객체
(클래스)
메타프로그래밍과 타입 트레이트
다음 네임스페이스에 정의됨 std::experimental::ranges
동일한 타입 또는 다른 타입의 객체와 교환 가능한지 여부를 확인합니다
(클래스 템플릿)
여러 타입들의 공통 참조 타입을 결정합니다
(클래스 템플릿)
타입 집합의 공통 타입을 결정합니다
(클래스 템플릿)
태그된 페어와 튜플
네임스페이스에 정의됨 std::experimental::ranges
타입이 태그 지정자임을 명시합니다
(concept)
타입이 태그 지정자와 해당 요소 타입을 나타냄을 명시
(concept)
튜플과 유사한 타입에 이름 있는 접근자를 추가함
(클래스 템플릿)
태그가 지정된 std::pair 에 대한 앨리어스 템플릿
(alias template)
tagged_pair 생성을 위한 편의 함수
(함수 템플릿)
헤더에 정의됨 <experimental/ranges/tuple>
태그된 std::tuple 에 대한 앨리어스 템플릿
(앨리어스 템플릿)
tagged_tuple 생성을 위한 편의 함수
(함수 템플릿)
네임스페이스에 정의됨 std::experimental::ranges::tag
ranges::tagged 와 함께 사용할 태그 지정자
(클래스)

반복자

반복자 관련 개념
다음 네임스페이스에 정의됨 std::experimental::ranges
반복자 개념
operator* 를 적용하여 타입이 읽을 수 있음을 명시합니다
(concept)
반복자가 참조하는 객체에 값을 쓸 수 있음을 명시
(concept)
Semiregular 타입이 전위 및 후위 증가 연산자로 증가될 수 있음을 명시
(concept)
WeaklyIncrementable 타입의 증가 연산이 동등성 보존적임을 지정하고, 해당 타입이 EqualityComparable 임을 지정합니다
(concept)
해당 타입의 객체가 증가 및 역참조될 수 있음을 명시함
(concept)
특정 타입의 객체가 Iterator 타입에 대한 센티넬임을 명시함
(컨셉)
iterator와 sentinel에 - 연산자를 적용하여 상수 시간에 그 차이를 계산할 수 있음을 명시
(concept)
타입이 입력 반복자임을 명시합니다. 즉, 참조된 값을 읽을 수 있고 전위/후위 증가가 모두 가능함
(concept)
주어진 값 타입에 대해 해당 타입이 출력 반복자임을 명시합니다. 즉, 해당 타입의 값을 쓸 수 있고 전위/후위 증가가 모두 가능함
(concept)
InputIterator 가 동등 비교와 다중 패스를 지원하는 순방향 반복자임을 명시합니다
(concept)
ForwardIterator 가 역방향 이동을 지원하는 양방향 반복자임을 명시합니다
(concept)
양방향 반복자가 상수 시간 내 이동과 첨자 연산을 지원하는 임의 접근 반복자임을 명시함
(concept)
간접 호출 가능 개념
호출 가능 타입이 Readable 타입을 역참조한 결과로 호출될 수 있음을 명시함
(컨셉)
호출 가능 객체가 Readable 타입을 역참조한 결과로 호출될 때 Predicate 개념을 만족함을 명시합니다.
(concept)
호출 가능 객체가 일부 Readable 타입들을 역참조한 결과와 함께 호출될 때 Relation 개념을 만족함을 명시합니다
(concept)
호출 가능 객체가 일부 Readable 타입들을 역참조한 결과로 호출될 때 StrictWeakOrder 를 만족함을 명시합니다.
(concept)
공통 알고리즘 요구사항
값들이 Readable 타입으로부터 Writable 타입으로 이동될 수 있음을 명시함
(concept)
Readable 타입으로부터 Writable 타입으로 값들이 이동될 수 있으며, 해당 이동이 중간 객체를 통해 수행될 수 있음을 명시
(concept)
값들이 Readable 타입으로부터 Writable 타입으로 복사될 수 있음을 명시함
(concept)
Readable 타입에서 Writable 타입으로 값들이 복사될 수 있으며, 복사가 중간 객체를 통해 수행될 수 있음을 명시함
(concept)
두 개의 Readable 타입이 참조하는 값들이 교환될 수 있음을 명시함
(concept)
두 개의 Readable 타입이 참조하는 값들을 비교할 수 있음을 명시함
(concept)
제자리에서 요소들을 재정렬하는 알고리즘의 공통 요구사항을 명시함
(concept)
정렬된 시퀀스를 요소 복사를 통해 출력 시퀀스로 병합하는 알고리즘의 요구 사항을 지정함
(concept)
시퀀스를 정렬된 시퀀스로 재배열하는 알고리즘의 공통 요구사항을 명시함
(concept)
개념 유틸리티
일부 Readable 타입들을 역참조한 결과에 호출 가능 객체를 적용한 결과를 계산함
(클래스 템플릿)
투영(projection)을 수용하는 알고리즘들의 제약 조건을 지정하기 위한 헬퍼 템플릿
(클래스 템플릿)
Iterator primitives
반복자 유틸리티
다음 네임스페이스에 정의됨 std::experimental::ranges
객체를 역참조한 결과를 해당 rvalue 참조 타입으로 캐스팅합니다
(커스터마이제이션 포인트 객체)
역참조 가능한 두 객체가 참조하는 값을 교환
(커스터마이제이션 포인트 객체)
Iterator traits
다음 네임스페이스에 정의됨 std::experimental::ranges
WeaklyIncrementable 타입의 차이 타입을 구함
(클래스 템플릿)
Readable 타입의 값 타입을 획득함
(클래스 템플릿)
입력 반복자 타입의 반복자 카테고리를 획득함
(클래스 템플릿)
반복자의 관련 타입들을 수집하는 호환성 특성 클래스
(alias template)
역참조 가능한 객체의 연관된 참조 타입들을 획득함
(alias template)
반복자 범주 태그
다음 네임스페이스에 정의됨 std::experimental::ranges
반복자 카테고리를 나타내기 위해 사용되는 빈 클래스 타입
(class)
std::iterator_traits 특수화
정의된 네임스페이스 std
ranges TS 반복자에 대한 std::iterator_traits 특수화
(클래스 템플릿 특수화)
반복자 연산
정의된 네임스페이스 std::experimental::ranges
주어진 거리만큼 반복자를 전진시킵니다
(함수 템플릿)
반복자와 센티넬 사이의 거리, 또는 범위의 시작과 끝 사이의 거리를 반환합니다
(함수 템플릿)
반복자를 증가시킵니다
(함수 템플릿)
반복자를 감소시킴
(함수 템플릿)
Iterator adaptors
네임스페이스에 정의됨 std::experimental::ranges
역순 순회를 위한 반복자 어댑터
(클래스 템플릿)
컨테이너의 끝에 삽입하기 위한 반복자 어댑터
(클래스 템플릿)
컨테이너의 앞쪽에 삽입하기 위한 iterator 어댑터
(클래스 템플릿)
컨테이너에 삽입하기 위한 반복자 어댑터
(클래스 템플릿)
rvalue 참조로 역참조하는 iterator 어댑터
(클래스 템플릿)
move_iterator 와 함께 사용하기 위한 센티널 어댑터
(클래스 템플릿)
반복자-감시자 쌍을 레거시 알고리즘에서 사용할 수 있는 공통 반복자 타입으로 적응
(클래스 템플릿)
시작 위치로부터의 거리를 추적하는 반복자 어댑터
(클래스 템플릿)
자신의 범위 경계를 알고 있는 반복자 타입과 함께 사용하기 위한 빈 센티널 타입
(클래스)
잠재적으로 댕글링(dangling)될 수 있는 반복자에 대한 래퍼
(클래스 템플릿)
rvalue 범위의 반복자 타입을 dangling 으로 래핑하는
(alias template)
어떤 반복자와도 사용하여 무한 범위를 나타내는 sentinel 타입
(클래스)
스트림 반복자
네임스페이스에 정의됨 std::experimental::ranges
std::basic_istream 에서 읽어들이는 입력 반복자
(클래스 템플릿)
std::basic_ostream 에 쓰기를 수행하는 출력 반복자
(클래스 템플릿)
std::basic_streambuf 에서 읽어들이는 입력 반복자
(클래스 템플릿)
std::basic_streambuf 에 쓰기를 수행하는 출력 반복자
(클래스 템플릿)

범위

Range 개념
타입이 range임을 지정하며, 즉 begin 반복자와 end 센티넬을 제공함
(concept)
range가 상수 시간에 크기를 알 수 있음을 지정함
(concept)
range가 view임을 지정하며, 즉 상수 시간 복사/이동/할당을 가짐
(concept)
range가 동일한 반복자와 센티넬 타입을 가짐을 지정함
(concept)
반복자 타입이 InputIterator 를 만족하는 range를 지정함
(concept)
반복자 타입이 OutputIterator 를 만족하는 range를 지정함
(concept)
반복자 타입이 ForwardIterator 를 만족하는 range를 지정함
(concept)
반복자 타입이 BidirectionalIterator 를 만족하는 range를 지정함
(concept)
반복자 타입이 RandomAccessIterator 를 만족하는 range를 지정함
(concept)
Range 접근
정의된 네임스페이스 std::experimental::ranges
range의 시작 부분에 대한 반복자를 반환함
(customization point object)
range의 끝 부분에 대한 반복자를 반환함
(customization point object)
range에 대한 역방향 반복자를 반환함
(customization point object)
range에 대한 역방향 끝 반복자를 반환함
(customization point object)
Range 기본 연산
정의된 네임스페이스 std::experimental::ranges
상수 시간에 크기를 계산할 수 있는 range의 크기를 얻음
(customization point object)
range가 비어 있는지 확인함
(customization point object)
연속적인 range의 시작 부분에 대한 포인터를 얻음
(customization point object)
range의 반복자 및 센티넬 타입을 얻음
(alias template)

알고리즘

비수정 시퀀스 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
범위 내 모든 요소, 일부 요소, 또는 어떤 요소에도 대해 조건자가 true 인지 확인합니다
(함수 템플릿)
요소 범위에 함수를 적용합니다
(function template)
특정 조건을 만족하는 요소의 개수를 반환합니다
(함수 템플릿)
두 범위가 처음으로 다른 위치를 찾습니다
(함수 템플릿)
두 요소 집합이 동일한지 확인합니다
(function template)
한 범위가 다른 범위보다 사전순으로 작으면 true 를 반환
(함수 템플릿)
특정 조건을 만족하는 첫 번째 요소를 찾습니다
(함수 템플릿)
특정 범위에서 마지막 요소 시퀀스를 찾음
(function template)
요소 집합 중 하나를 검색합니다
(function template)
동일한(또는 주어진 조건자를 만족하는) 첫 두 개의 인접 항목을 찾습니다
(함수 템플릿)
요소 범위를 검색합니다
(function template)
범위에서 특정 요소의 연속된 복사본을 검색합니다
(함수 템플릿)
시퀀스 수정 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
요소 범위를 새로운 위치로 복사합니다
(함수 템플릿)
지정된 개수의 요소들을 새로운 위치로 복사합니다
(함수 템플릿)
요소들의 범위를 역순으로 복사합니다
(함수 템플릿)
요소들의 범위를 새로운 위치로 이동합니다
(함수 템플릿)
요소 범위를 역순으로 새로운 위치로 이동합니다
(함수 템플릿)
요소 범위에 특정 값을 할당합니다
(함수 템플릿)
여러 요소에 값을 할당합니다
(함수 템플릿)
요소 범위에 함수를 적용합니다
(함수 템플릿)
함수의 결과를 범위에 저장합니다
(함수 템플릿)
함수를 N회 적용한 결과를 저장함
(함수 템플릿)
특정 조건을 만족하는 요소들을 제거함
(함수 템플릿)
특정 조건을 만족하는 요소들을 생략하고 요소 범위를 복사합니다
(함수 템플릿)
특정 조건을 만족하는 모든 값을 다른 값으로 대체합니다
(함수 템플릿)
범위를 복사하며 특정 조건을 만족하는 요소를 다른 값으로 대체합니다
(함수 템플릿)
두 범위의 요소들을 교환합니다
(함수 템플릿)
범위 내 요소들의 순서를 역순으로 변경합니다
(함수 템플릿)
역순으로 정렬된 범위의 복사본을 생성합니다
(함수 템플릿)
범위 내 요소들의 순서를 회전시킵니다
(함수 템플릿)
요소 범위를 복사하고 회전시킵니다
(함수 템플릿)
범위 내 요소들을 무작위로 재정렬합니다
(함수 템플릿)
범위에서 연속된 중복 요소를 제거합니다
(함수 템플릿)
연속적인 중복을 포함하지 않는 일부 범위의 요소 사본을 생성합니다
(함수 템플릿)
파티셔닝 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
주어진 조건자에 의해 범위가 분할되었는지 확인합니다
(함수 템플릿)
요소들의 범위를 두 그룹으로 분할합니다
(함수 템플릿)
범위의 요소들을 두 그룹으로 나누어 복사합니다
(함수 템플릿)
요소들을 두 그룹으로 분할하면서 상대적 순서를 유지합니다
(함수 템플릿)
분할된 범위의 분할 지점을 찾습니다
(함수 템플릿)
정렬 연산
정의된 네임스페이스 std::experimental::ranges
범위가 오름차순으로 정렬되었는지 확인합니다
(함수 템플릿)
가장 큰 정렬된 부분 범위를 찾습니다
(함수 템플릿)
범위를 오름차순으로 정렬합니다
(함수 템플릿)
범위의 첫 N개 요소를 정렬합니다
(함수 템플릿)
요소 범위를 복사하고 부분적으로 정렬합니다
(함수 템플릿)
동일한 요소들 간의 순서를 유지하며 범위의 요소들을 정렬합니다
(함수 템플릿)
주어진 범위를 부분적으로 정렬하여 특정 요소를 기준으로 분할되도록 보장합니다
(함수 템플릿)
이진 검색 연산 (정렬된 범위에서)
다음 네임스페이스에 정의됨 std::experimental::ranges
주어진 값보다 작지 않은 첫 번째 요소에 대한 반복자를 반환합니다
(함수 템플릿)
특정 값보다 첫 번째 요소에 대한 반복자를 반환합니다
(함수 템플릿)
특정 범위에 요소가 존재하는지 확인합니다
(함수 템플릿)
특정 키와 일치하는 요소들의 범위를 반환합니다
(함수 템플릿)
집합 연산 (정렬된 범위에서)
정의된 네임스페이스 std::experimental::ranges
두 개의 정렬된 범위를 병합합니다
(함수 템플릿)
두 개의 정렬된 범위를 제자리에서 병합합니다
(함수 템플릿)
한 집합이 다른 집합의 부분집합이면 true 를 반환
(함수 템플릿)
두 집합의 차집합을 계산합니다
(함수 템플릿)
두 집합의 교집합을 계산합니다
(함수 템플릿)
두 집합 간의 대칭 차집합을 계산합니다
(함수 템플릿)
두 집합의 합집합을 계산합니다
(함수 템플릿)
힙 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
주어진 범위가 최대 힙인지 확인합니다
(함수 템플릿)
최대 힙인 가장 큰 부분 범위를 찾습니다
(함수 템플릿)
요소 범위로부터 최대 힙을 생성합니다
(함수 템플릿)
최대 힙에 요소를 추가합니다
(함수 템플릿)
최대 힙에서 가장 큰 요소를 제거합니다
(함수 템플릿)
최대 힙을 오름차순으로 정렬된 원소 범위로 변환합니다
(함수 템플릿)
최소/최대 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
주어진 값 중 더 큰 값을 반환합니다
(함수 템플릿)
범위에서 가장 큰 요소를 반환합니다
(함수 템플릿)
주어진 값들 중 더 작은 값을 반환합니다
(함수 템플릿)
범위에서 가장 작은 요소를 반환합니다
(함수 템플릿)
두 요소 중 작은 값과 큰 값을 반환합니다
(function template)
범위에서 가장 작은 요소와 가장 큰 요소를 반환합니다
(함수 템플릿)
순열 연산
다음 네임스페이스에 정의됨 std::experimental::ranges
시퀀스가 다른 시퀀스의 순열인지 판별합니다
(함수 템플릿)
요소 범위의 다음으로 큰 사전식 순열을 생성합니다
(함수 템플릿)
요소 범위의 다음으로 작은 사전식 순열을 생성합니다
(함수 템플릿)