Extensions for ranges
From cppreference.net
<
cpp
|
experimental
C++ 범위 확장(ISO/IEC TS 21425:2017)은 핵심 언어에 대한 하나의 수정 사항을 명시하고 이 페이지에 나열된 C++ 표준 라이브러리의 새로운 구성 요소들을 정의합니다.
Ranges TS는 Concepts TS 에 의해 수정된 C++14 표준을 기반으로 합니다.
목차 |
핵심 언어 변경사항
Ranges TS는 범위 기반 for 루프 의 명세를 수정하여 서로 다른 타입의 begin과 end 반복자를 허용합니다. 이 변경은 센티넬(sentinel)의 사용을 가능하게 하며 C++17에도 동일하게 적용됩니다.
개념
핵심 언어 개념 |
|
|
헤더에 정의됨
<experimental/ranges/concepts>
|
|
|
다음 네임스페이스에 정의됨
std::experimental::ranges
|
|
|
한 타입이 다른 타입과 동일함을 명시함
(concept) |
|
|
한 타입이 다른 타입으로부터 파생되었음을 명시
(concept) |
|
|
한 타입이 다른 타입으로 암시적으로 변환 가능함을 명시
(concept) |
|
|
두 타입이 공통 참조 타입을 공유함을 명시
(concept) |
|
|
두 타입이 공통 타입을 공유함을 명시
(concept) |
|
|
타입이 정수형 타입임을 명시함
(컨셉) |
|
|
해당 타입이 부호 있는 정수형임을 명시합니다
(concept) |
|
|
타입이 부호 없는 정수형임을 명시함
(컨셉) |
|
|
한 타입이 다른 타입으로부터 할당 가능함을 명시
(concept) |
|
|
타입이 교환 가능하거나 두 타입이 서로 교환될 수 있음을 명시함
(concept) |
|
비교 개념 |
|
|
헤더에 정의됨
<experimental/ranges/concepts>
|
|
|
다음 네임스페이스에 정의됨
std::experimental::ranges
|
|
|
타입이 Boolean 컨텍스트에서 사용될 수 있음을 명시
(concept) |
|
|
두 타입이
==
및
!
=
연산자를 사용하여 동등 비교가 가능함을 명시함
(concept) |
|
operator ==
가 동치 관계임을 명시함
(concept) |
|
|
해당 타입의 비교 연산자들이 완전 순서를 생성함을 명시
(concept) |
|
객체 개념 |
|
|
헤더에 정의됨
<experimental/ranges/concepts>
|
|
|
정의된 네임스페이스
std::experimental::ranges
|
|
|
해당 타입의 객체가 파괴될 수 있음을 명시함
(concept) |
|
|
해당 타입의 변수가 일련의 인자 타입들로부터 생성되거나 바인딩될 수 있음을 명시
(concept) |
|
|
해당 타입의 객체가 기본 생성될 수 있음을 명시
(concept) |
|
|
해당 타입의 객체가 이동 생성될 수 있음을 명시함
(concept) |
|
|
특정 타입의 객체가 복사 생성 및 이동 생성될 수 있음을 명시
(concept) |
|
|
특정 타입의 객체가 이동 및 교환될 수 있음을 명시
(concept) |
|
|
해당 타입의 객체가 복사, 이동 및 스왑될 수 있음을 명시함
(concept) |
|
|
해당 타입의 객체가 복사, 이동, 교환 및 기본 생성될 수 있음을 명시
(concept) |
|
타입이 정규(regular)임을 지정하며, 이는
Semiregular
이면서 동시에
EqualityComparable
임을 의미합니다
(concept) |
|
Callable 개념 |
|
|
헤더에 정의됨
<experimental/ranges/concepts>
|
|
|
네임스페이스에 정의됨
std::experimental::ranges
|
|
|
호출 가능 타입이 주어진 인수 타입 집합으로 호출될 수 있음을 명시
(concept) |
|
|
호출 가능 타입이 부울 조건자임을 명시함
(concept) |
|
|
호출 가능 타입이 이항 관계임을 명시함
(concept) |
|
Relation
이 엄격한 약순서(strict weak ordering)를 부과함을 명시
(concept) |
|
난수 생성기 개념 |
|
|
헤더에 정의됨
<experimental/ranges/random>
|
|
|
다음 네임스페이스에 정의됨
std::experimental::ranges
|
|
|
타입이 균일 난수 생성기로 적합함을 명시
(컨셉) |
|
일반 유틸리티
유틸리티 컴포넌트 |
|
|
헤더에 정의됨
<experimental/ranges/utility>
|
|
|
네임스페이스에 정의됨
std::experimental::ranges
|
|
|
두 객체의 값을 교환합니다
(커스터마이제이션 포인트 객체) |
|
|
인수를 새 값으로 교체하고 이전 값을 반환합니다
(function template) |
|
함수 객체 |
|
|
헤더에 정의됨
<experimental/ranges/functional>
|
|
|
다음 네임스페이스에 정의됨
std::experimental::ranges
|
|
|
주어진 인자로
Callable
객체를 호출합니다
(함수 템플릿) |
|
|
함수 객체 구현
x
==
y
(클래스 템플릿) |
|
|
함수 객체 구현
x
!
=
y
(클래스 템플릿) |
|
|
x
>
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
함수 객체 구현
x
<
y
(클래스 템플릿) |
|
|
x
>=
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
함수 객체 구현
x
<=
y
(클래스 템플릿) |
|
|
인수를 변경 없이 반환하는 함수 객체
(클래스) |
|
메타프로그래밍과 타입 트레이트 |
|
|
다음 네임스페이스에 정의됨
std::experimental::ranges
|
|
|
동일한 타입 또는 다른 타입의 객체와 교환 가능한지 여부를 확인합니다
(클래스 템플릿) |
|
|
여러 타입들의 공통 참조 타입을 결정합니다
(클래스 템플릿) |
|
|
타입 집합의 공통 타입을 결정합니다
(클래스 템플릿) |
|
태그된 페어와 튜플 |
|
|
헤더에 정의됨
<experimental/ranges/utility>
|
|
|
네임스페이스에 정의됨
std::experimental::ranges
|
|
|
타입이 태그 지정자임을 명시합니다
(concept) |
|
|
타입이 태그 지정자와 해당 요소 타입을 나타냄을 명시
(concept) |
|
|
튜플과 유사한 타입에 이름 있는 접근자를 추가함
(클래스 템플릿) |
|
|
태그가 지정된
std::pair
에 대한 앨리어스 템플릿
(alias template) |
|
tagged_pair
생성을 위한 편의 함수
(함수 템플릿) |
|
|
헤더에 정의됨
<experimental/ranges/tuple>
|
|
|
태그된
std::tuple
에 대한 앨리어스 템플릿
(앨리어스 템플릿) |
|
tagged_tuple
생성을 위한 편의 함수
(함수 템플릿) |
|
|
헤더에 정의됨
<experimental/ranges/algorithm>
|
|
|
네임스페이스에 정의됨
std::experimental::ranges::tag
|
|
|
ranges::tagged
와 함께 사용할 태그 지정자
(클래스) |
|
반복자
|
헤더에 정의됨
<experimental/ranges/iterator>
|
|
|
|
|
|
다음 네임스페이스에 정의됨
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
에 쓰기를 수행하는
출력 반복자
(클래스 템플릿) |
|
범위
|
정의된 헤더
<experimental/ranges/range>
|
|
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) |
|
알고리즘
|
헤더에 정의됨
<experimental/ranges/algorithm>
|
|
비수정 시퀀스 연산 |
|
|
다음 네임스페이스에 정의됨
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
|
|
|
시퀀스가 다른 시퀀스의 순열인지 판별합니다
(함수 템플릿) |
|
|
요소 범위의 다음으로 큰 사전식 순열을 생성합니다
(함수 템플릿) |
|
|
요소 범위의 다음으로 작은 사전식 순열을 생성합니다
(함수 템플릿) |
|