Algorithms library
알고리즘 라이브러리는 요소 범위에서 동작하는 다양한 목적(예: 검색, 정렬, 카운팅, 조작)의 함수들을 정의합니다.
범위
는
[
first
,
last
)
로 정의되며, 여기서
last
는 검사하거나 수정할 마지막 요소의
다음
요소를 가리킵니다.
목차 |
제약 알고리즘 (C++20부터)
C++20은
제약 조건이 지정된
대부분의 알고리즘을
std::ranges
네임스페이스에서 제공합니다. 이러한 알고리즘에서
범위
는
반복자
-
센티넬
쌍으로 지정하거나 단일
range
인수로 지정할 수 있으며, 프로젝션과 멤버 함수 포인터 호출 가능 객체가 지원됩니다. 추가로, 대부분의 알고리즘의
반환 타입
이 알고리즘 실행 중 계산된 모든 잠재적으로 유용한 정보를 반환하도록 변경되었습니다.
std::vector<int> v{7, 1, 4, 0, -1}; std::ranges::sort(v); // 제약 알고리즘
실행 정책 (C++17부터)
대부분의 알고리즘은 실행 정책을 수용하는 오버로드를 가지고 있습니다. 표준 라이브러리 알고리즘은 여러 실행 정책 을 지원하며, 라이브러리는 해당 실행 정책 타입과 객체를 제공합니다. 사용자는 해당 타입의 실행 정책 객체 로 병렬 알고리즘을 호출하여 정적으로 실행 정책을 선택할 수 있습니다.
표준 라이브러리 구현체들은(사용자들은 아님) 확장 기능으로 추가 실행 정책들을 정의할 수 있습니다. 구현에서 정의된 타입의 실행 정책 객체로 호출된 병렬 알고리즘들의 의미론은 구현에서 정의됩니다.
병렬 버전 알고리즘들(
std::for_each
와
std::for_each_n
제외)은 범위의 요소들을 임의로 복사할 수 있으며, 이는
std::
is_trivially_copy_constructible_v
<
T
>
와
std::
is_trivially_destructible_v
<
T
>
가 모두
true
인 경우에 한합니다. 여기서
T
는 요소의 타입입니다.
|
헤더에 정의됨
<execution>
|
|
|
네임스페이스에 정의됨
std::execution
|
|
|
(C++17)
(C++17)
(C++17)
(C++20)
|
실행 정책 타입
(클래스) |
|
(C++17)
(C++17)
(C++17)
(C++20)
|
전역 실행 정책 객체
(상수) |
|
네임스페이스에 정의됨
std
|
|
|
(C++17)
|
클래스가 실행 정책을 나타내는지 테스트
(클래스 템플릿) |
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_parallel_algorithm
|
201603L
|
(C++17) | 병렬 알고리즘 |
__cpp_lib_execution
|
201603L
|
(C++17) | 실행 정책 |
201902L
|
(C++20) | std::execution::unsequenced_policy |
비수정 시퀀스 연산
배치 작업
|
헤더 파일에 정의됨
<algorithm>
|
|
|
범위의 요소들에 단항
함수 객체
를 적용함
(함수 템플릿) |
|
|
(C++20)
|
범위의 요소들에 단항
함수 객체
를 적용함
(알고리즘 함수 객체) |
|
(C++17)
|
시퀀스의 처음 N개 요소에 함수 객체를 적용함
(함수 템플릿) |
|
(C++20)
|
시퀀스의 처음 N개 요소에 함수 객체를 적용함
(알고리즘 함수 객체) |
검색 연산
|
헤더에 정의됨
<algorithm>
|
|
|
(C++11)
(C++11)
(C++11)
|
범위 내 모든 요소에 대해 조건자가
true
인지, 일부 요소에 대해 true인지, 또는 어떤 요소에도 true가 아닌지 검사합니다
(함수 템플릿) |
|
(C++20)
(C++20)
(C++20)
|
범위 내 모든 요소, 일부 요소, 또는 어떤 요소에도 대해 조건자가
true
인지 확인합니다
(알고리즘 함수 객체) |
|
(C++23)
(C++23)
|
범위가 주어진 요소나 하위 범위를 포함하는지 확인합니다
(알고리즘 함수 객체) |
|
(C++11)
|
특정 기준을 만족하는 첫 번째 요소를 찾습니다
(함수 템플릿) |
|
(C++20)
(C++20)
(C++20)
|
특정 기준을 만족하는 첫 번째 요소를 찾습니다
(알고리즘 함수 객체) |
|
(C++23)
(C++23)
(C++23)
|
특정 조건을 만족하는 마지막 요소를 찾습니다
(알고리즘 함수 객체) |
|
특정 범위에서 마지막 원소 시퀀스를 찾습니다
(function template) |
|
|
(C++20)
|
특정 범위에서 마지막 요소 시퀀스를 찾음
(알고리즘 함수 객체) |
|
요소 집합 중 하나를 검색합니다
(function template) |
|
|
(C++20)
|
요소 집합 중 하나를 검색합니다
(알고리즘 함수 객체) |
|
동일한(또는 주어진 조건자를 만족하는) 첫 두 개의 인접한 항목을 찾습니다
(function template) |
|
|
(C++20)
|
동일한(또는 주어진 조건자를 만족하는) 첫 두 개의 인접 항목을 찾음
(알고리즘 함수 객체) |
|
특정 조건을 만족하는 요소의 개수를 반환합니다
(함수 템플릿) |
|
|
(C++20)
(C++20)
|
특정 조건을 만족하는 요소의 개수를 반환합니다
(알고리즘 함수 객체) |
|
두 범위가 처음으로 다른 위치를 찾습니다
(function template) |
|
|
(C++20)
|
두 범위가 처음으로 다른 위치를 찾음
(알고리즘 함수 객체) |
|
두 요소 집합이 동일한지 판별합니다
(function template) |
|
|
(C++20)
|
두 요소 집합이 동일한지 확인합니다
(알고리즘 함수 객체) |
|
요소 범위의 첫 번째 발생을 검색합니다
(function template) |
|
|
(C++20)
|
요소 범위의 첫 번째 발생을 검색합니다
(알고리즘 함수 객체) |
|
범위에서 특정 요소가 연속적으로 지정된 횟수만큼 나타나는 첫 번째 위치를 검색합니다
(함수 템플릿) |
|
|
(C++20)
|
범위에서 특정 원소가 연속적으로 지정된 횟수만큼 나타나는 첫 번째 위치를 검색합니다
(알고리즘 함수 객체) |
|
(C++23)
|
범위가 다른 범위로 시작하는지 확인합니다
(알고리즘 함수 객체) |
|
(C++23)
|
범위가 다른 범위로 끝나는지 확인합니다
(알고리즘 함수 객체) |
폴드 연산 (C++23부터)
|
헤더 파일에 정의됨
<algorithm>
|
|
|
(C++23)
|
요소 범위를 왼쪽으로 폴딩
(알고리즘 함수 객체) |
|
(C++23)
|
첫 번째 요소를 초기값으로 사용하여 요소 범위를 왼쪽으로 폴딩
(알고리즘 함수 객체) |
|
(C++23)
|
요소 범위를 오른쪽으로 폴딩
(알고리즘 함수 객체) |
|
(C++23)
|
마지막 요소를 초기값으로 사용하여 요소 범위를 오른쪽으로 폴딩
(알고리즘 함수 객체) |
|
(C++23)
|
요소 범위를 왼쪽으로 폴딩하고
pair
(반복자, 값)을 반환
(알고리즘 함수 객체) |
|
첫 번째 요소를 초기값으로 사용하여 요소 범위를 왼쪽으로 폴딩하고
pair
(반복자,
optional
)을 반환
(알고리즘 함수 객체) |
|
시퀀스 수정 연산
복사 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
(C++11)
|
요소 범위를 새로운 위치로 복사합니다
(함수 템플릿) |
|
(C++20)
(C++20)
|
요소 범위를 새로운 위치로 복사합니다
(알고리즘 함수 객체) |
|
(C++11)
|
지정된 개수의 요소를 새로운 위치로 복사합니다
(함수 템플릿) |
|
(C++20)
|
지정된 개수의 요소를 새로운 위치로 복사합니다
(알고리즘 함수 객체) |
|
요소 범위를 역순으로 복사합니다
(함수 템플릿) |
|
|
(C++20)
|
요소 범위를 역순으로 복사합니다
(알고리즘 함수 객체) |
|
(C++11)
|
요소 범위를 새로운 위치로 이동합니다
(함수 템플릿) |
|
(C++20)
|
요소 범위를 새로운 위치로 이동합니다
(알고리즘 함수 객체) |
|
(C++11)
|
요소 범위를 역순으로 새로운 위치로 이동합니다
(함수 템플릿) |
|
(C++20)
|
요소 범위를 역순으로 새로운 위치로 이동합니다
(알고리즘 함수 객체) |
스왑 연산
|
정의된 헤더
<string_view>
|
|
|
두 객체의 값을 교환
(함수 템플릿) |
|
|
정의된 헤더
<algorithm>
|
|
|
두 요소 범위를 교환
(함수 템플릿) |
|
|
(C++20)
|
두 요소 범위를 교환
(알고리즘 함수 객체) |
|
두 반복자가 가리키는 요소를 교환
(함수 템플릿) |
|
변환 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
요소 범위에 함수를 적용하여 결과를 대상 범위에 저장함
(함수 템플릿) |
|
|
(C++20)
|
요소 범위에 함수를 적용함
(알고리즘 함수 객체) |
|
특정 조건을 만족하는 모든 값을 다른 값으로 대체함
(함수 템플릿) |
|
|
(C++20)
(C++20)
|
특정 조건을 만족하는 모든 값을 다른 값으로 대체함
(알고리즘 함수 객체) |
|
범위를 복사하며 특정 조건을 만족하는 요소를 다른 값으로 대체함
(함수 템플릿) |
|
|
(C++20)
(C++20)
|
범위를 복사하며 특정 조건을 만족하는 요소를 다른 값으로 대체함
(알고리즘 함수 객체) |
생성 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
주어진 값을 범위의 모든 요소에 복사 할당
(함수 템플릿) |
|
|
(C++20)
|
요소 범위에 특정 값을 할당
(알고리즘 함수 객체) |
|
주어진 값을 범위 내 N개 요소에 복사 할당
(함수 템플릿) |
|
|
(C++20)
|
여러 요소에 값을 할당
(알고리즘 함수 객체) |
|
연속적인 함수 호출 결과를 범위의 모든 요소에 할당
(함수 템플릿) |
|
|
(C++20)
|
함수 결과를 범위에 저장
(알고리즘 함수 객체) |
|
연속적인 함수 호출 결과를 범위 내 N개 요소에 할당
(함수 템플릿) |
|
|
(C++20)
|
함수를 N번 적용한 결과를 저장
(알고리즘 함수 객체) |
제거 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
특정 조건을 만족하는 요소들을 제거함
(함수 템플릿) |
|
|
(C++20)
(C++20)
|
특정 조건을 만족하는 요소들을 제거함
(알고리즘 함수 객체) |
|
특정 조건을 만족하는 요소들을 생략하고 범위의 요소들을 복사함
(함수 템플릿) |
|
|
(C++20)
(C++20)
|
특정 조건을 만족하는 요소들을 생략하고 범위의 요소들을 복사함
(알고리즘 함수 객체) |
|
범위에서 연속된 중복 요소들을 제거함
(함수 템플릿) |
|
|
(C++20)
|
범위에서 연속된 중복 요소들을 제거함
(알고리즘 함수 객체) |
|
연속된 중복 요소가 없는 일부 범위 요소들의 사본을 생성함
(함수 템플릿) |
|
|
(C++20)
|
연속된 중복 요소가 없는 일부 범위 요소들의 사본을 생성함
(알고리즘 함수 객체) |
순서 변경 연산
|
헤더에 정의됨
<algorithm>
|
|
|
범위 내 요소들의 순서를 뒤집음
(함수 템플릿) |
|
|
(C++20)
|
범위 내 요소들의 순서를 뒤집음
(알고리즘 함수 객체) |
|
뒤집힌 범위의 복사본을 생성함
(함수 템플릿) |
|
|
(C++20)
|
뒤집힌 범위의 복사본을 생성함
(알고리즘 함수 객체) |
|
범위 내 요소들의 순서를 회전시킴
(함수 템플릿) |
|
|
(C++20)
|
범위 내 요소들의 순서를 회전시킴
(알고리즘 함수 객체) |
|
요소 범위를 복사하고 회전시킴
(함수 템플릿) |
|
|
(C++20)
|
요소 범위를 복사하고 회전시킴
(알고리즘 함수 객체) |
|
(C++20)
|
범위 내 요소들을 이동시킴
(함수 템플릿) |
|
범위 내 요소들을 이동시킴
(알고리즘 함수 객체) |
|
|
(until C++17)
(C++11)
|
범위 내 요소들을 무작위로 재정렬함
(함수 템플릿) |
|
(C++20)
|
범위 내 요소들을 무작위로 재정렬함
(알고리즘 함수 객체) |
샘플링 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
(C++17)
|
시퀀스에서 N개의 무작위 요소를 선택함
(함수 템플릿) |
|
(C++20)
|
시퀀스에서 N개의 무작위 요소를 선택함
(알고리즘 함수 객체) |
요구사항
일부 알고리즘은 인수로 표현된 시퀀스가 "정렬됨" 또는 "분할됨" 상태를 요구합니다. 이 요구사항이 충족되지 않을 경우 동작은 정의되지 않습니다.
|
시퀀스는 비교자 comp 에 대해 정렬되어 있다 는 것은 시퀀스를 가리키는 모든 반복자 iter 와 음이 아닌 정수 n 에 대해 iter + n [1] 가 시퀀스의 원소를 가리키는 유효한 반복자 일 때, comp ( * ( iter + n ) , * iter ) == false [1] 인 경우를 말한다. |
(C++20 이전) |
|
시퀀스는 비교자
comp
와 투영
proj
에 대해
comp
와
proj
에 대해 정렬되어 있다
는 것은 시퀀스를 가리키는 모든 반복자
iter
와 음이 아닌 정수
n
에 대해
iter
+
n
[1]
가 시퀀스의 원소를 가리키는 유효한 반복자일 때,
bool
(
std::
invoke
(
comp,
std::
invoke
(
proj,
*
(
iter
+
n
)
)
,
시퀀스가 비교자 comp 에 대해 정렬되어 있다 는 것은 시퀀스가 comp 와 std:: identity { } (항등 투영)에 대해 정렬되어 있는 경우를 말한다. |
(C++20 이후) |
시퀀스
[
start
,
finish
)
가
표현식
f
(
e
)
에 대해 분할되었다
는 것은, 모든
i
에 대해
[
0
,
std::
distance
(
start, finish
)
)
범위 내에서
f
(
*
(
start
+
i
)
)
[1]
가
true
인 것이
i
<
n
인 경우에만 성립하는 정수
n
이 존재함을 의미합니다.
파티셔닝 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
(C++11)
|
주어진 조건자로 범위가 분할되었는지 확인
(함수 템플릿) |
|
(C++20)
|
주어진 조건자로 범위가 분할되었는지 확인
(알고리즘 함수 객체) |
|
요소들의 범위를 두 그룹으로 분할
(함수 템플릿) |
|
|
(C++20)
|
요소들의 범위를 두 그룹으로 분할
(알고리즘 함수 객체) |
|
(C++11)
|
요소들을 두 그룹으로 나누어 범위를 복사
(함수 템플릿) |
|
(C++20)
|
요소들을 두 그룹으로 나누어 범위를 복사
(알고리즘 함수 객체) |
|
요소들의 상대적 순서를 유지하며 두 그룹으로 분할
(함수 템플릿) |
|
|
(C++20)
|
요소들의 상대적 순서를 유지하며 두 그룹으로 분할
(알고리즘 함수 객체) |
|
(C++11)
|
분할된 범위의 분할 지점을 찾음
(함수 템플릿) |
|
(C++20)
|
분할된 범위의 분할 지점을 찾음
(알고리즘 함수 객체) |
정렬 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
범위를 오름차순으로 정렬
(함수 템플릿) |
|
|
(C++20)
|
범위를 오름차순으로 정렬
(알고리즘 함수 객체) |
|
동일한 요소들 사이의 순서를 유지하며 범위 정렬
(함수 템플릿) |
|
|
(C++20)
|
동일한 요소들 사이의 순서를 유지하며 범위 정렬
(알고리즘 함수 객체) |
|
범위의 처음 N개 요소 정렬
(함수 템플릿) |
|
|
(C++20)
|
범위의 처음 N개 요소 정렬
(알고리즘 함수 객체) |
|
범위의 요소를 복사하고 부분적으로 정렬
(함수 템플릿) |
|
|
(C++20)
|
범위의 요소를 복사하고 부분적으로 정렬
(알고리즘 함수 객체) |
|
(C++11)
|
범위가 오름차순으로 정렬되었는지 확인
(함수 템플릿) |
|
(C++20)
|
범위가 오름차순으로 정렬되었는지 확인
(알고리즘 함수 객체) |
|
(C++11)
|
가장 큰 정렬된 부분 범위를 찾음
(함수 템플릿) |
|
(C++20)
|
가장 큰 정렬된 부분 범위를 찾음
(알고리즘 함수 객체) |
|
주어진 요소로 분할되도록 범위를 부분 정렬
(함수 템플릿) |
|
|
(C++20)
|
주어진 요소로 분할되도록 범위를 부분 정렬
(알고리즘 함수 객체) |
이진 검색 연산 (분할된 범위에서)
|
정의된 헤더
<algorithm>
|
|
|
주어진 값보다
작지 않은
첫 번째 요소에 대한 반복자를 반환
(함수 템플릿) |
|
|
(C++20)
|
주어진 값보다
작지 않은
첫 번째 요소에 대한 반복자를 반환
(알고리즘 함수 객체) |
|
특정 값보다
큰
첫 번째 요소에 대한 반복자를 반환
(함수 템플릿) |
|
|
(C++20)
|
특정 값보다
큰
첫 번째 요소에 대한 반복자를 반환
(알고리즘 함수 객체) |
|
특정 키와 일치하는 요소들의 범위를 반환
(함수 템플릿) |
|
|
(C++20)
|
특정 키와 일치하는 요소들의 범위를 반환
(알고리즘 함수 객체) |
|
부분적으로 정렬된 범위에서 요소가 존재하는지 확인
(함수 템플릿) |
|
|
(C++20)
|
부분적으로 정렬된 범위에서 요소가 존재하는지 확인
(알고리즘 함수 객체) |
집합 연산 (정렬된 범위에서)
|
헤더 파일에 정의됨
<algorithm>
|
|
|
한 시퀀스가 다른 시퀀스의 부분 시퀀스이면
true
를 반환
(함수 템플릿) |
|
|
(C++20)
|
한 시퀀스가 다른 시퀀스의 부분 시퀀스이면
true
를 반환
(알고리즘 함수 객체) |
|
두 집합의 합집합을 계산
(함수 템플릿) |
|
|
(C++20)
|
두 집합의 합집합을 계산
(알고리즘 함수 객체) |
|
두 집합의 교집합을 계산
(함수 템플릿) |
|
|
(C++20)
|
두 집합의 교집합을 계산
(알고리즘 함수 객체) |
|
두 집합의 차집합을 계산
(함수 템플릿) |
|
|
(C++20)
|
두 집합의 차집합을 계산
(알고리즘 함수 객체) |
|
두 집합의 대칭차를 계산
(함수 템플릿) |
|
|
(C++20)
|
두 집합의 대칭차를 계산
(알고리즘 함수 객체) |
병합 연산 (정렬된 범위에서)
|
헤더 파일에 정의됨
<algorithm>
|
|
|
두 개의 정렬된 범위를 병합
(함수 템플릿) |
|
|
(C++20)
|
두 개의 정렬된 범위를 병합
(알고리즘 함수 객체) |
|
두 개의 정렬된 범위를 제자리에서 병합
(함수 템플릿) |
|
|
(C++20)
|
두 개의 정렬된 범위를 제자리에서 병합
(알고리즘 함수 객체) |
힙 연산
|
랜덤 액세스
범위
|
(C++20 이전) |
|
랜덤 액세스
범위
랜덤 액세스
범위
|
(C++20 이후) |
힙은 std::make_heap 과 ranges::make_heap (C++20부터) 을 사용하여 생성할 수 있습니다.
힙의 더 많은 속성에 대해서는 max heap 을 참조하십시오.
|
헤더 파일에 정의됨
<algorithm>
|
|
|
최대 힙에 요소를 추가함
(함수 템플릿) |
|
|
(C++20)
|
최대 힙에 요소를 추가함
(알고리즘 함수 객체) |
|
최대 힙에서 가장 큰 요소를 제거함
(함수 템플릿) |
|
|
(C++20)
|
최대 힙에서 가장 큰 요소를 제거함
(알고리즘 함수 객체) |
|
요소 범위로부터 최대 힙을 생성함
(함수 템플릿) |
|
|
(C++20)
|
요소 범위로부터 최대 힙을 생성함
(알고리즘 함수 객체) |
|
최대 힙을 오름차순으로 정렬된 요소 범위로 변환함
(함수 템플릿) |
|
|
(C++20)
|
최대 힙을 오름차순으로 정렬된 요소 범위로 변환함
(알고리즘 함수 객체) |
|
(C++11)
|
주어진 범위가 최대 힙인지 확인함
(함수 템플릿) |
|
(C++20)
|
주어진 범위가 최대 힙인지 확인함
(알고리즘 함수 객체) |
|
(C++11)
|
최대 힙인 가장 큰 부분 범위를 찾음
(함수 템플릿) |
|
(C++20)
|
최대 힙인 가장 큰 부분 범위를 찾음
(알고리즘 함수 객체) |
최소/최대 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
주어진 값 중 더 큰 값을 반환
(함수 템플릿) |
|
|
(C++20)
|
주어진 값 중 더 큰 값을 반환
(알고리즘 함수 객체) |
|
범위 내 가장 큰 요소를 반환
(함수 템플릿) |
|
|
(C++20)
|
범위 내 가장 큰 요소를 반환
(알고리즘 함수 객체) |
|
주어진 값 중 더 작은 값을 반환
(함수 템플릿) |
|
|
(C++20)
|
주어진 값 중 더 작은 값을 반환
(알고리즘 함수 객체) |
|
범위 내 가장 작은 요소를 반환
(함수 템플릿) |
|
|
(C++20)
|
범위 내 가장 작은 요소를 반환
(알고리즘 함수 객체) |
|
(C++11)
|
두 요소 중 더 작은 값과 더 큰 값을 반환
(함수 템플릿) |
|
(C++20)
|
두 요소 중 더 작은 값과 더 큰 값을 반환
(알고리즘 함수 객체) |
|
(C++11)
|
범위 내 가장 작은 요소와 가장 큰 요소를 반환
(함수 템플릿) |
|
(C++20)
|
범위 내 가장 작은 요소와 가장 큰 요소를 반환
(알고리즘 함수 객체) |
|
(C++17)
|
값을 한 쌍의 경계 값 사이로 고정
(함수 템플릿) |
|
(C++20)
|
값을 한 쌍의 경계 값 사이로 고정
(알고리즘 함수 객체) |
사전식 비교 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
한 범위가 다른 범위보다 사전순으로 작으면
true
를 반환함
(함수 템플릿) |
|
|
(C++20)
|
한 범위가 다른 범위보다 사전순으로 작으면
true
를 반환함
(알고리즘 함수 객체) |
|
3-way 비교를 사용하여 두 범위를 비교함
(함수 템플릿) |
|
순열 연산
|
헤더 파일에 정의됨
<algorithm>
|
|
|
원소 범위의 다음으로 큰 사전식 순열을 생성함
(함수 템플릿) |
|
|
(C++20)
|
원소 범위의 다음으로 큰 사전식 순열을 생성함
(알고리즘 함수 객체) |
|
원소 범위의 다음으로 작은 사전식 순열을 생성함
(함수 템플릿) |
|
|
(C++20)
|
원소 범위의 다음으로 작은 사전식 순열을 생성함
(알고리즘 함수 객체) |
|
(C++11)
|
한 시퀀스가 다른 시퀀스의 순열인지 결정함
(함수 템플릿) |
|
(C++20)
|
한 시퀀스가 다른 시퀀스의 순열인지 결정함
(알고리즘 함수 객체) |
수치 연산
|
헤더에 정의됨
<numeric>
|
|
|
(C++11)
|
범위를 시작 값의 연속적인 증가값으로 채움
(함수 템플릿) |
|
(C++23)
|
범위를 시작 값의 연속적인 증가값으로 채움
(알고리즘 함수 객체) |
|
요소 범위의 합계를 계산하거나 접음
(함수 템플릿) |
|
|
두 요소 범위의 내적을 계산함
(함수 템플릿) |
|
|
범위 내 인접 요소 간의 차이를 계산함
(함수 템플릿) |
|
|
요소 범위의 부분 합을 계산함
(함수 템플릿) |
|
|
(C++17)
|
std::accumulate
와 유사하지만 순서가 보장되지 않음
(함수 템플릿) |
|
(C++17)
|
std::partial_sum
와 유사하지만,
i
번째
입력 요소를
i
번째
합계에서 제외함
(함수 템플릿) |
|
(C++17)
|
std::partial_sum
와 유사하지만,
i
번째
입력 요소를
i
번째
합계에 포함함
(함수 템플릿) |
|
(C++17)
|
호출 가능 객체를 적용한 후 순서가 보장되지 않은 축약을 수행함
(함수 템플릿) |
|
(C++17)
|
호출 가능 객체를 적용한 후 배타적 스캔을 계산함
(함수 템플릿) |
|
(C++17)
|
호출 가능 객체를 적용한 후 포함적 스캔을 계산함
(함수 템플릿) |
초기화되지 않은 메모리 연산
|
헤더 파일에 정의됨
<memory>
|
|
|
객체 범위를 초기화되지 않은 메모리 영역으로 복사합니다
(함수 템플릿) |
|
|
(C++20)
|
객체 범위를 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체) |
|
(C++11)
|
객체들을 지정된 개수만큼 초기화되지 않은 메모리 영역에 복사합니다
(함수 템플릿) |
|
(C++20)
|
지정된 개수의 객체를 초기화되지 않은 메모리 영역에 복사합니다
(알고리즘 함수 객체) |
|
범위로 정의된 초기화되지 않은 메모리 영역에 객체를 복사합니다
(함수 템플릿) |
|
|
(C++20)
|
범위로 정의된 초기화되지 않은 메모리 영역에 객체를 복사합니다
(알고리즘 함수 객체) |
|
시작 위치와 개수로 정의된 초기화되지 않은 메모리 영역에 객체를 복사합니다
(함수 템플릿) |
|
|
(C++20)
|
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에 객체를 복사합니다
(알고리즘 함수 객체) |
|
(C++17)
|
객체 범위를 초기화되지 않은 메모리 영역으로 이동
(function template) |
|
(C++20)
|
객체 범위를 초기화되지 않은 메모리 영역으로 이동
(알고리즘 함수 객체) |
|
(C++17)
|
여러 객체를 초기화되지 않은 메모리 영역으로 이동
(함수 템플릿) |
|
(C++20)
|
지정된 개수의 객체를 초기화되지 않은 메모리 영역으로 이동
(알고리즘 함수 객체) |
|
(C++17)
|
초기화되지 않은 메모리 영역에서
기본 초기화
를 통해 객체를 생성합니다. 범위로 정의된 영역에 적용됩니다.
(함수 템플릿) |
|
범위로 정의된 초기화되지 않은 메모리 영역에서
기본 초기화
를 통해 객체를 생성함
(알고리즘 함수 객체) |
|
|
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에서
기본 초기화
를 통해 객체를 생성합니다
(함수 템플릿) |
|
|
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에서
기본 초기화
를 통해 객체를 생성함
(알고리즘 함수 객체) |
|
|
(C++17)
|
초기화되지 않은 메모리 영역에서 범위로 정의된 객체들을
값 초기화
를 통해 생성합니다
(함수 템플릿) |
|
초기화되지 않은 메모리 영역에서
값 초기화
를 통해 객체를 생성하며, 범위로 정의됨
(알고리즘 함수 객체) |
|
|
(C++17)
|
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에
값 초기화
를 통해 객체를 생성합니다
(함수 템플릿) |
|
시작점과 개수로 정의된 초기화되지 않은 메모리 영역에
값 초기화
를 통해 객체를 생성함
(알고리즘 함수 객체) |
|
|
(C++17)
|
객체 범위를 파괴합니다
(함수 템플릿) |
|
(C++20)
|
객체 범위를 파괴함
(알고리즘 함수 객체) |
|
(C++17)
|
범위 내의 여러 객체를 파괴합니다
(함수 템플릿) |
|
(C++20)
|
범위 내의 여러 객체를 파괴함
(알고리즘 함수 객체) |
|
(C++17)
|
주어진 주소의 객체를 파괴합니다
(함수 템플릿) |
|
(C++20)
|
주어진 주소의 객체를 파괴함
(알고리즘 함수 객체) |
|
(C++20)
|
주어진 주소에 객체를 생성합니다
(함수 템플릿) |
|
(C++20)
|
주어진 주소에 객체를 생성함
(알고리즘 함수 객체) |
난수 생성 (since C++26)
|
헤더 파일에 정의됨
<random>
|
|
|
(C++26)
|
범위를 균일 난수 비트 생성기로부터 생성된 난수로 채움
(알고리즘 함수 객체) |
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_algorithm_iterator_requirements
|
202207L
|
(C++23) | 비-레인지 알고리즘에 대한 입력으로서의 레인지 반복자 |
__cpp_lib_clamp
|
201603L
|
(C++17) | std::clamp |
__cpp_lib_constexpr_algorithms
|
201806L
|
(C++20) | 알고리즘에 대한 constexpr |
202306L
|
(C++26) | Constexpr 안정 정렬 | |
__cpp_lib_algorithm_default_value_type
|
202403L
|
(C++26) | 목록 초기화 for algorithms |
__cpp_lib_freestanding_algorithm
|
202311L
|
(C++26) | <algorithm> 내의 독립형 기능 |
__cpp_lib_robust_nonmodifying_seq_ops
|
201304L
|
(C++14) | 비수정 시퀀스 연산의 강화 (두 범위 오버로드 for std::mismatch , std::equal and std::is_permutation) |
__cpp_lib_sample
|
201603L
|
(C++17) | std::sample |
__cpp_lib_shift
|
201806L
|
(C++20) | std::shift_left and std::shift_right |
C 라이브러리
|
헤더 파일에 정의됨
<cstdlib>
|
|
|
지정되지 않은 타입의 요소 범위를 정렬합니다
(함수) |
|
|
배열에서 지정되지 않은 타입의 요소를 검색합니다
(함수) |
|
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 193 | C++98 | 힙이 * first 가 가장 큰 요소여야 함 |
*
first
와 동일한 요소가
존재할 수 있음 |
| LWG 2150 | C++98 | 정렬된 시퀀스의 정의가 부정확했음 | 수정됨 |
| LWG 2166 | C++98 |
힙 요구사항이
최대 힙 정의와 충분히 일치하지 않았음 |
요구사항 개선됨 |
참고 항목
|
C 문서
참조:
Algorithms
|