Namespaces
Variants

Constrained algorithms (since C++20)

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types

C++20은 제약 조건이 지정된 대부분의 알고리즘을 std::ranges 네임스페이스에서 제공합니다. 이러한 알고리즘에서 범위는 반복자 - 센티넬 쌍 또는 단일 range 인수로 지정할 수 있으며, 프로젝션과 멤버 함수 포인터 호출 가능 객체가 지원됩니다. 또한 대부분의 알고리즘의 반환 타입 은 알고리즘 실행 중 계산된 모든 잠재적으로 유용한 정보를 반환하도록 변경되었습니다.

목차

알고리즘 함수 객체

알고리즘 함수 객체 (AFO), 비공식적으로 niebloid 로 알려진 것은 하나 이상의 오버로드된 함수 템플릿으로 지정된 customization point object (CPO)입니다. 이러한 함수 템플릿의 이름은 해당 알고리즘 함수 객체를 지정합니다.

알고리즘 함수 객체 o 에 대해, 해당 함수 템플릿들의 집합을 S 라 하자. 그러면 임의의 인수 시퀀스 args... 에 대해, o ( args... ) 표현식 동등 하게 s ( args... ) 이며, 여기서 s 에 대한 이름 탐색의 결과는 오버로드 집합 S 이다.

std::ranges 네임스페이스의 제약 알고리즘들은 알고리즘 함수 객체로 정의됩니다. 결과적으로:

  • 명시적 템플릿 인수 목록은 이들 중 어느 것을 호출할 때도 지정할 수 없습니다.
  • 이들 중 어느 것도 인수 종속 lookup 에 보이지 않습니다.
  • 이들 중 어느 것이 함수 호출 연산자의 왼쪽 이름으로 일반 비한정 lookup 에 의해 발견될 때, 인수 종속 lookup 이 억제됩니다.

제약 조건이 있는 알고리즘

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

제약된 수치 연산

헤더 파일에 정의됨 <numeric>
네임스페이스에 정의됨 std::ranges
범위를 시작 값의 연속적인 증가값으로 채움
(알고리즘 함수 객체)

제한된 폴드 연산

헤더에 정의됨 <algorithm>
네임스페이스에 정의됨 std::ranges
요소 범위를 왼쪽으로 폴드
(알고리즘 함수 객체)
첫 번째 요소를 초기값으로 사용하여 요소 범위를 왼쪽으로 폴드
(알고리즘 함수 객체)
요소 범위를 오른쪽으로 폴드
(알고리즘 함수 객체)
마지막 요소를 초기값으로 사용하여 요소 범위를 오른쪽으로 폴드
(알고리즘 함수 객체)
요소 범위를 왼쪽으로 폴드하고 pair (반복자, 값)을 반환
(알고리즘 함수 객체)
첫 번째 요소를 초기값으로 사용하여 요소 범위를 왼쪽으로 폴드하고 pair (반복자, optional )을 반환
(알고리즘 함수 객체)

제약된 초기화되지 않은 메모리 알고리즘

헤더 파일에 정의됨 <memory>
네임스페이스에 정의됨 std::ranges
객체 범위를 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체)
지정된 개수의 객체를 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체)
객체를 범위로 정의된 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체)
객체를 시작점과 개수로 정의된 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체)
객체 범위를 초기화되지 않은 메모리 영역으로 이동합니다
(알고리즘 함수 객체)
지정된 개수의 객체를 초기화되지 않은 메모리 영역으로 이동합니다
(알ゴ리즘 함수 객체)
범위로 정의된 초기화되지 않은 메모리 영역에서 기본 초기화 를 통해 객체를 생성합니다
(알고리즘 함수 객체)
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에서 기본 초기화 를 통해 객체를 생성합니다
(알고리즘 함수 객체)
범위로 정의된 초기화되지 않은 메모리 영역에서 값 초기화 를 통해 객체를 생성합니다
(알고리즘 함수 객체)
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에서 값 초기화 를 통해 객체를 생성합니다
(알고리즘 함수 객체)
객체 범위를 파괴합니다
(알고리즘 함수 객체)
범위 내 지정된 개수의 객체를 파괴합니다
(알고리즘 함수 객체)
지정된 주소의 객체를 파괴합니다
(알고리즘 함수 객체)
지정된 주소에 객체를 생성합니다
(알고리즘 함수 객체)

제약된 난수 알고리즘

헤더 파일에 정의됨 <random>
네임스페이스에 정의됨 std::ranges
범위를 균일 난수 비트 생성기로부터의 난수로 채움
(알고리즘 함수 객체)

반환 타입

헤더에 정의됨 <algorithm>
네임스페이스에 정의됨 std::ranges
반복자와 함수 객체를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
두 개의 반복자를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
두 개의 반복자를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
세 개의 반복자를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
세 개의 반복자를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
동일한 타입의 두 객체나 참조를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
반복자와 불리언 플래그를 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
반복자와 값을 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)
반복자와 값을 단일 단위로 저장하는 방법을 제공함
(클래스 템플릿)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_algorithm_default_value_type 202403L (C++26) 목록 초기화 for algorithms
__cpp_lib_ranges 201911L (C++20) 범위 라이브러리 제약된 알고리즘
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges 폴드 알고리즘
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with , std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left , std::shift_right
202202L (C++23) std::ranges::shift_left , std::ranges::shift_right
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
P3136R1 C++20 niebloids가 함수 객체 이외의 특수 엔티티로
명시되는 것이 허용됨
함수 객체로 명시되어야 함