Namespaces
Variants

제약된 알고리즘 (C++20부터)

cppreference.net에서
 
 
알고리즘 라이브러리
제약된 알고리즘과 범위 기반 알고리즘 (C++20)
제약된 알고리즘, 예: ranges::copy, ranges::sort, ...
정렬 및 관련 연산
분할 연산
(C++11)    

정렬 연산
이진 탐색 연산
(분할된 범위에 대해)
집합 연산 (정렬된 범위에 대해)
병합 연산 (정렬된 범위에 대해)
힙 연산
최소/최대 연산
(C++11)
(C++17)
사전식 비교 연산
순열 연산


 
제약된 알고리즘
이 메뉴의 모든 이름은 네임스페이스 std::ranges
비수정 시퀀스 연산
수정 시퀀스 연산
분할 연산
정렬 연산
이진 탐색 연산 (정렬된 범위에 대해)
       
       
집합 연산 (정렬된 범위에 대해)
힙 연산
최소/최대 연산
       
       
순열 연산
폴드 연산
수치 연산
(C++23)            
초기화되지 않은 저장소에 대한 연산
반환 유형
 

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

알고리즘 함수 객체

하나의 알고리즘 함수 객체 (AFO)는 비공식적으로 niebloid 라고 하며, 하나 이상의 오버로드된 함수 템플릿으로 지정된 커스터마이제이션 포인트 객체 (CPO)입니다. 이러한 함수 템플릿의 이름은 해당 알고리즘 함수 객체를 지정합니다.

알고리즘 함수 객체 o에 대해, S을 해당 함수 템플릿 집합이라고 하자. 그러면 임의의 인수 시퀀스 args...에 대해, o(args...)는 표현식 동등합니다. 즉, s(args...)와 같으며, 이때 s의 이름 조회 결과는 오버로드 집합 S입니다.

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

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

Range 매개변수

일부 오버로드는 range 인수를 받으며, 이들은 각 range 인수에 대해 분리된 iterator와 sentinel 인수를 받는 namespaceranges의 해당 오버로드로 디스패치하는 것처럼 동작합니다. 여기서 각 range 인수 r:

  • 해당 iterator 인수는 ranges::begin(r)로 초기화됩니다.
  • 해당 sentinel 인수는 ranges::end(r)로 초기화됩니다.
(C++26까지)
  • 해당 sentinel 인수는 다음으로 초기화됩니다:
  • ranges::next(ranges::begin(r), ranges::end(r)) , 만약 r의 유형이 forward_range를 모델링하고 ranges::next의 계산이 지정된 복잡성 요구 사항을 충족하는 경우.
  • ranges::end(r) 그렇지 않으면.
(C++26부터)

비수정 시퀀스 연산

헤더에 정의됨 <algorithm>
네임스페이스에 정의됨 std::ranges
배치 연산
applies a unary function object to elements from a range
(algorithm function object)
applies a function object to the first N elements of a sequence
(algorithm function object)
검색 연산
범위 내 모든 요소, 일부 요소, 또는 어떤 요소에 대해 조건자가 true인지 확인합니다
(알고리즘 함수 객체)
범위에 주어진 요소 또는 부분 범위가 포함되어 있는지 확인합니다
(알고리즘 함수 객체)
특정 조건을 만족하는 첫 번째 요소를 찾습니다
(알고리즘 함수 객체)
특정 조건을 만족하는 마지막 요소를 찾습니다
(알고리즘 함수 객체)
특정 범위에서 요소의 마지막 시퀀스를 찾습니다
(알고리즘 함수 객체)
요소 집합 중 하나를 검색합니다
(알고리즘 함수 객체)
서로 같거나 (또는 주어진 조건자를 만족하는) 첫 번째로 인접한 두 항목을 찾습니다
(알고리즘 함수 객체)
특정 조건을 만족하는 요소의 개수를 반환합니다
(알고리즘 함수 객체)
두 범위가 다른 첫 번째 위치를 찾습니다
(알고리즘 함수 객체)
두 요소 집합이 동일한지 확인합니다
(알고리즘 함수 객체)
요소 범위의 첫 번째 출현을 검색합니다
(알고리즘 함수 객체)
범위에서 요소의 연속된 복사본 n개의 첫 번째 출현을 검색합니다
(알고리즘 함수 객체)
범위가 다른 범위로 시작하는지 확인합니다
(알고리즘 함수 객체)
범위가 다른 범위로 끝나는지 확인합니다
(알고리즘 함수 객체)
폴드 연산
요소의 범위를 왼쪽으로 접습니다
(알고리즘 함수 객체)
첫 번째 요소를 초기값으로 사용하여 요소의 범위를 왼쪽으로 접습니다
(알고리즘 함수 객체)
요소의 범위를 오른쪽으로 접습니다
(알고리즘 함수 객체)
마지막 요소를 초기값으로 사용하여 요소의 범위를 오른쪽으로 접습니다
(알고리즘 함수 객체)
요소의 범위를 왼쪽으로 접고, pair (반복자, 값)
(알고리즘 함수 객체)
첫 번째 요소를 초기값으로 사용하여 요소의 범위를 왼쪽으로 접고, pair (반복자, optional)
(알고리즘 함수 객체)

수정 시퀀스 연산

헤더에 정의됨 <algorithm>
네임스페이스에 정의됨 std::ranges
복사 작업
요소 범위를 새 위치에 복사합니다
(알고리즘 함수 객체)
지정된 개수의 요소를 새 위치에 복사합니다
(알고리즘 함수 객체)
요소 범위를 역순으로 복사합니다
(알고리즘 함수 객체)
요소 범위를 새 위치로 이동합니다
(알고리즘 함수 객체)
요소 범위를 역순으로 새 위치로 이동합니다
(알고리즘 함수 객체)
교환 연산
두 요소 범위를 교환합니다
(알고리즘 함수 객체)
변환 연산
함수를 요소 범위에 적용합니다
(알고리즘 함수 객체)
특정 조건을 만족하는 모든 값을 다른 값으로 대체합니다
(알고리즘 함수 객체)
범위를 복사하고, 특정 조건을 만족하는 요소를 다른 값으로 대체합니다
(알고리즘 함수 객체)
생성 연산
범위의 요소들에 특정 값을 할당한다
(알고리즘 함수 객체)
여러 요소에 값을 할당한다
(알고리즘 함수 객체)
함수의 결과를 범위에 저장한다
(알고리즘 함수 객체)
함수를 N번 적용한 결과를 저장한다
(알고리즘 함수 객체)
제거 연산
특정 조건을 만족하는 요소를 제거합니다
(알고리즘 함수 객체)
특정 조건을 만족하는 요소를 생략하고 요소 범위를 복사합니다
(알고리즘 함수 객체)
범위에서 연속된 중복 요소를 제거합니다
(알고리즘 함수 객체)
연속된 중복이 없는 요소 범위의 복사본을 생성합니다
(알고리즘 함수 객체)
순서 변경 연산
범위 내 요소의 순서를 뒤집습니다
(알고리즘 함수 객체)
뒤집힌 범위의 복사본을 생성합니다
(알고리즘 함수 객체)
범위 내 요소의 순서를 회전합니다
(알고리즘 함수 객체)
요소 범위를 복사하고 회전합니다
(알고리즘 함수 객체)
범위 내 요소를 이동합니다
(알고리즘 함수 객체)
범위 내 요소를 무작위로 재정렬합니다
(알고리즘 함수 객체)
샘플링 연산
시퀀스에서 N개의 무작위 요소를 선택합니다
(알고리즘 함수 객체)

정렬 및 관련 연산

헤더에 정의됨 <algorithm>
네임스페이스에 정의됨 std::ranges
분할 연산
주어진 조건자에 의해 범위가 분할되었는지 확인합니다.
(알고리즘 함수 객체)
요소의 범위를 두 그룹으로 분할합니다.
(알고리즘 함수 객체)
요소를 두 그룹으로 분할하여 범위를 복사합니다.
(알고리즘 함수 객체)
각 그룹 내의 상대적 순서를 유지하면서 요소를 두 그룹으로 분할합니다.
(알고리즘 함수 객체)
분할된 범위의 분할 지점을 찾습니다.
(알고리즘 함수 객체)
정렬 연산
범위가 정렬되었는지 확인합니다
(algorithm function object)
가장 큰 정렬된 부분 범위를 찾습니다
(algorithm function object)
요소 범위를 정렬합니다
(algorithm function object)
범위의 처음 N개 요소를 정렬합니다
(algorithm function object)
요소 범위를 복사하고 부분 정렬합니다
(algorithm function object)
동등한 요소 간의 상대적 순서를 유지하면서 요소 범위를 정렬합니다
(algorithm function object)
범위가 정렬되었을 때의 N번째 요소를 찾습니다
(algorithm function object)
이진 탐색 연산 (정렬된 범위에서)
이진 탐색을 사용하여 주어진 값보다 작지 않은 첫 번째 요소를 찾습니다
(algorithm 함수 객체)
이진 탐색을 사용하여 주어진 값보다 큰 첫 번째 요소를 찾습니다
(algorithm 함수 객체)
이진 탐색을 사용하여 범위에 요소가 존재하는지 확인합니다
(algorithm 함수 객체)
이진 탐색을 사용하여 주어진 값과 일치하는 요소의 범위를 찾습니다
(algorithm 함수 객체)
정렬된 범위에 대한 집합 연산
한 시퀀스가 다른 시퀀스의 부분 수열인지 확인합니다
(알고리즘 함수 객체)
두 집합의 차집합을 계산합니다
(알고리즘 함수 객체)
두 집합의 교집합을 계산합니다
(알고리즘 함수 객체)
두 집합의 대칭 차집합을 계산합니다
(알고리즘 함수 객체)
두 집합의 합집합을 계산합니다
(알고리즘 함수 객체)
병합 연산 (정렬된 범위에 대해)
두 개의 정렬된 범위를 병합합니다
(알고리즘 함수 객체)
두 개의 정렬된 범위를 제자리에서 병합합니다
(알고리즘 함수 객체)
힙 연산
주어진 범위가 최대 힙인지 확인합니다
(알고리즘 함수 객체)
최대 힙인 가장 큰 부분 범위를 찾습니다
(알고리즘 함수 객체)
요소 범위에서 최대 힙을 생성합니다
(알고리즘 함수 객체)
최대 힙에 요소를 추가합니다
(알고리즘 함수 객체)
최대 힙에서 가장 큰 요소를 제거합니다
(알고리즘 함수 객체)
최대 힙을 정렬된 요소 범위로 변환합니다
(알고리즘 함수 객체)
최소/최대 연산
주어진 값들 중 더 큰 값을 반환합니다
(알고리즘 함수 객체)
범위에서 가장 큰 요소를 반환합니다
(알고리즘 함수 객체)
주어진 값들 중 더 작은 값을 반환합니다
(알고리즘 함수 객체)
범위에서 가장 작은 요소를 반환합니다
(알고리즘 함수 객체)
두 요소 중 더 작은 값과 더 큰 값을 반환합니다
(알고리즘 함수 객체)
범위에서 가장 작은 요소와 가장 큰 요소를 반환합니다
(알고리즘 함수 객체)
값을 한 쌍의 경계값 사이로 고정합니다
(알고리즘 함수 객체)
사전식 비교 연산
두 범위를 사전식으로 비교합니다
(알고리즘 함수 객체)
순열 연산
시퀀스가 다른 시퀀스의 순열인지 판단합니다
(알고리즘 함수 객체)
요소 범위의 다음으로 큰 사전식 순열을 생성합니다
(알고리즘 함수 객체)
요소 범위의 다음으로 작은 사전식 순열을 생성합니다
(알고리즘 함수 객체)

숫자 연산

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

특수화된 <memory> 알고리즘

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

특수화된 <random> 알고리즘

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

반환 타입

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

참고

기능 테스트 매크로 값 표준 기능
__cpp_lib_algorithm_default_value_type 202403L (C++26) 리스트 초기화 알고리즘용
__cpp_lib_parallel_algorithm 202506L (C++26) 병렬 범위 알고리즘
__cpp_lib_ranges 201911L (C++20) Ranges 라이브러리 및 제약된 알고리즘
__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 는
함수 객체 이외의 특수 엔터티로 지정될 수 있었습니다
지정되어야 합니다
함수 객체로