<algorithm>
알고리즘을 수행하는 C++ 표준 라이브러리 컨테이너 템플릿 함수를 정의합니다.
Syntax
(see links below for specific algorithm syntax)
참고 항목
라이브러리는 <algorithm>
문도 사용합니다 #include <initializer_list>
.
설명
C++ 표준 라이브러리 알고리즘은 다양한 데이터 구조에서 작동할 수 있습니다. 작동할 수 있는 데이터 구조에는 C++ 표준 라이브러리 컨테이너 클래스(예: vector
C list
++ 표준 라이브러리 컨테이너 클래스)뿐만 아니라 특정 알고리즘의 요구 사항을 충족하는 한 사용자 정의 데이터 구조 및 요소 배열도 포함됩니다. C++ 표준 라이브러리 알고리즘은 반복기를 통해 간접적으로 컨테이너 요소를 액세스 및 이동하여 이러한 수준의 일반성을 달성합니다.
C++ 표준 라이브러리 알고리즘은 일반적으로 시작 또는 끝 위치로 지정하는 반복기 범위를 처리합니다. 참조되는 범위는 범위의 모든 반복기를 역참조할 수 있어야 하며, 각 범위의 시퀀스 내에서 반복기를 증가시켜 첫 번째 위치에서 마지막 위치에 연결할 수 있어야 한다는 점에서 유효해야 합니다.
C++20부터 정의된 <algorithm>
대부분의 알고리즘은 다음을 사용하는 range
양식에서도 사용할 수 있습니다. 예를 들어 호출 대신 호출 sort(v1.begin(), v1.end(), greater<int>());
할 수 있습니다. ranges::sort(v1, greater<int>());
C++ 표준 라이브러리 알고리즘은 동시에 다양한 유형의 컨테이너 개체에서 작동할 수 있습니다. 두 개의 접미사가 알고리즘의 목적에 대한 정보를 전달하는 데 사용되었습니다.
_if
접미사는 알고리즘이 요소 자체가 아닌 요소의 값에서 작동하는 함수 개체와 함께 사용됨을 나타냅니다. 예를 들어 알고리즘은find_if
값이 함수 개체에 지정된 조건을 충족하는 요소를 찾는 반면 알고리즘은find
특정 값을 검색합니다._copy
접미사는 알고리즘이 일반적으로 수정된 값을 복사하는 대신 복사된 값을 수정한다는 것을 나타냅니다. 즉, 원본 범위의 요소를 수정하지 않고 결과를 출력 범위/반복기에 넣습니다. 예를 들어 알고리즘은reverse
범위 내 요소의 순서를 반대로 하는 반면 알고리즘은reverse_copy
역방향 결과를 대상 범위로 복사합니다.
C++ 표준 라이브러리 알고리즘은 종종 용도 또는 요구 사항을 나타내기 위해 그룹으로 분류됩니다. 여기에는 수정되지 않는 알고리즘과 비교하여 요소 값을 변경하는 알고리즘 수정이 포함됩니다. 파생 알고리즘은 요소 값이 아닌 요소 순서를 변경합니다. 제거 알고리즘은 범위 또는 범위 복사본에서 요소를 제거할 수 있습니다. 정렬 알고리즘은 다양한 방법으로 범위의 요소 순서를 다시 지정하고 정렬된 범위 알고리즘은 특정 방식으로 요소가 정렬된 범위에 대해서만 작동합니다.
숫자 처리를 위해 제공되는 C++ 표준 라이브러리 숫자 알고리즘에는 자체 헤더 파일이 <numeric>
있으며, 함수 개체와 어댑터는 헤더 <functional>
에 정의됩니다. 부울 값을 반환하는 함수 개체를 조건자라고 합니다. 기본 이진 조건자는 비교 operator<
입니다. 일반적으로 정렬되는 요소는 비교 가능한 것보다 적어야 하므로 두 요소가 동일하거나(둘 다 다른 요소보다 작지 않음) 다른 요소보다 작다는 것을 확인할 수 있습니다. 그러면 동일하지 않은 요소 사이에 순서가 지정됩니다.
알고리즘
속성 | 설명 |
---|---|
adjacent_find |
같지 않거나 지정한 조건을 충족하는 인접 요소 두 개를 검색합니다. |
all_of |
지정한 범위에서 각 요소에 조건이 있을 경우 true 를 반환합니다. |
any_of |
요소의 지정된 범위에 조건이 한 번이라도 있을 경우 true 를 반환합니다. |
binary_search |
정렬된 범위에 지정된 값과 같거나 이진 조건자가 지정한 의미에 따라 지정된 값과 같은 요소가 있는지 여부를 테스트합니다. |
clamp |
|
copy |
소스 범위의 요소를 대상 범위에 할당하여 요소의 소스 시퀀스 전체에서 반복하고 정방향으로 새 위치를 할당합니다. |
copy_backward |
소스 범위의 요소를 대상 범위에 할당하여 요소의 소스 시퀀스 전체에서 반복하고 역방향으로 새 위치를 할당합니다. |
copy_if |
지정된 조건에 대해 true 를 테스트하는 지정 범위의 모든 요소를 복사합니다. |
copy_n |
지정된 수의 요소를 복사합니다. |
count |
해당 값이 지정된 값과 일치하는 요소의 개수를 반환합니다. |
count_if |
해당 값이 지정된 조건과 일치하는 요소의 개수를 반환합니다. |
equal |
두 범위를 요소별로 비교하여 같음 여부 또는 이진 조건자가 지정한 의미의 동등성을 확인합니다. |
equal_range |
정렬된 범위에서 위치의 쌍을 찾습니다. 첫 번째는 지정된 요소의 위치보다 작거나 같으며 두 번째는 요소의 위치보다 큽니다. 여기서 시퀀스의 위치를 정하는 데 사용된 동등성 또는 순서 지정의 의미는 이진 조건자로 지정할 수 있습니다. |
fill |
지정한 범위의 모든 요소에 동일한 새 값을 할당합니다. |
fill_n |
특정 요소로 시작하는 범위에서 지정된 개수의 요소에 새 값을 할당합니다. |
find |
범위에서 지정된 값을 가진 요소가 첫 번째로 나타나는 위치를 찾습니다. |
find_end |
범위에서 지정된 시퀀스와 동일하거나 이진 조건자가 지정한 의미와 동일한 마지막 하위 시퀀스를 찾습니다. |
find_first_of |
대상 범위 내에서 여러 값이 첫 번째로 나타나는 경우 또는 이진 조건자가 지정한 의미에서 지정된 요소 집합과 동일한 여러 요소가 첫 번째로 나타나는 경우를 검색합니다. |
find_if |
범위에서 지정된 조건을 만족하는 요소가 첫 번째 나타나는 위치를 찾습니다. |
find_if_not |
조건을 충족하지 않는 지정된 범위의 첫 번째 요소를 반환합니다. |
for_each |
범위 내에서 정방향으로 각 요소에 지정된 함수 개체를 적용하고 함수 개체를 반환합니다. |
for_each_n |
|
generate |
범위에 있는 각 요소에 함수 개체에 의해 생성된 값을 할당합니다. |
generate_n |
함수 개체에 의해 생성된 값을 범위 내 지정된 수의 요소에 할당하고 마지막에 할당된 값 하나 다음의 위치로 반환합니다. |
includes |
요소 간 순서 지정 또는 동등성 기준을 이진 조건자로 지정할 수 있을 경우 하나의 정렬된 범위가 두 번째 정렬된 범위에 포함된 모든 요소를 포함할 수 있는지 여부를 테스트합니다. |
inplace_merge |
두 연속 정렬 범위의 요소를 단일 정렬 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
is_heap |
지정된 범위의 요소가 힙을 구성할 경우 true 를 반환합니다. |
is_heap_until |
지정된 범위가 마지막 요소까지 힙을 구성할 경우 true 를 반환합니다. |
is_partitioned |
지정된 범위에서 조건에 대해 true 를 테스트하는 모든 요소가 true 를 테스트하는 요소 앞에 있을 경우 false 를 반환합니다. |
is_permutation |
지정된 범위의 요소가 올바른 순열을 만드는지 여부를 결정합니다. |
is_sorted |
지정된 범위의 요소가 정렬된 순서로 되어 있을 경우 true 를 반환합니다. |
is_sorted_until |
지정된 범위의 요소가 정렬된 순서로 되어 있을 경우 true 를 반환합니다. |
iter_swap |
지정된 반복기의 쌍이 참조하는 두 값을 교환합니다. |
lexicographical_compare |
두 시퀀스를 요소별로 비교하여 둘 중 작은 것을 결정합니다. |
lower_bound |
정렬된 범위에서 지정된 값보다 크거나 같은 값을 갖는 첫 번째 요소의 위치를 찾습니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
make_heap |
지정한 범위의 요소를 첫 번째 요소가 가장 큰 힙으로 변환합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
max |
두 개체를 비교하고 둘 중 큰 개체를 반환합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
max_element |
지정된 범위에서 가장 큰 첫 번째 요소를 찾습니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
merge |
정렬된 두 소스 범위의 모든 요소를 정렬된 단일 대상 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
min |
두 개체를 비교하고 둘 중 작은 개체를 반환합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
min_element |
지정된 범위에서 가장 작은 첫 번째 요소를 찾습니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
minmax |
두 개의 입력된 매개 변수를 비교하여 작은 수와 큰 수의 순서로 구성된 한 쌍을 반환합니다. |
minmax_element |
한 번의 호출로 min_element 및 max_element 에 의해 수행된 작업을 수행합니다. |
mismatch |
두 범위를 요소별로 비교하여 같음 여부 또는 이진 조건자가 지정한 의미의 동등성을 확인하고 차이가 발생한 첫 번째 위치를 찾습니다. |
<alg> move |
지정된 범위와 연결된 요소를 이동합니다. |
move_backward |
한 반복기의 요소를 다른 반복기로 이동합니다. 이동은 지정된 범위의 마지막 요소에서 시작하고 해당 범위의 첫 번째 요소에서 끝납니다. |
next_permutation |
원래 순서 지정을 사전순에 따라 다음으로 큰 순열(있는 경우)로 대체할 수 있도록 범위의 요소 순서를 재정렬합니다. 여기서 다음의 의미는 이진 조건자로 지정할 수 있습니다. |
none_of |
지정한 범위에서 요소 사이에 조건이 절대 없을 경우 true 를 반환합니다. |
nth_element |
요소 범위를 분할하여 범위에서 시퀀스의 n번째 요소 앞의 모든 요소가 n번째 요소보다 작거나 같고 그 다음의 요소는 크거나 같도록 n번째 요소를 정확하게 찾습니다. |
partial_sort |
범위에 있는 지정된 수의 더 작은 요소를 비내림차순 또는 이진 조건자로 지정한 정렬 기준에 따라 정렬합니다. |
partial_sort_copy |
소스 범위의 요소를 대상 범위로 복사합니다. 여기서 소스 요소는 지정된 다른 이진 조건자보다 작거나 지정된 다른 이진 조건자로 정렬됩니다. |
partition |
범위의 요소를 두 개의 연결되지 않은 집합으로 분류하고, 단항 조건자를 만족하는 요소는 만족하지 않는 요소보다 앞에 오도록 합니다. |
partition_copy |
조건이 true 인 요소를 한 대상으로 복사하고, 조건이 false 인 요소를 다른 대상으로 복사합니다. 지정된 범위의 요소여야 합니다. |
partition_point |
조건을 충족하지 않는 지정된 범위의 첫 번째 요소를 반환합니다. 조건을 충족하는 요소가 그렇지 않은 요소 앞에 오도록 요소가 정렬됩니다. |
pop_heap |
힙 맨 앞부터 범위의 끝에서 두 번째 위치 중에서 가장 큰 요소를 제거한 다음 나머지 요소로 새 힙을 구성합니다. |
prev_permutation |
원래 순서 지정을 사전순에 따라 다음으로 큰 순열(있는 경우)로 대체할 수 있도록 범위의 요소 순서를 재정렬합니다. 여기서 다음의 의미는 이진 조건자로 지정할 수 있습니다. |
push_heap |
범위의 마지막에 있는 요소를 범위의 이전 요소로 구성된 기존 힙에 추가합니다. |
random_shuffle |
범위의 N개 요소의 시퀀스를 무작위로 선택한 N! 가능 배열 중 하나로 재정렬합니다. |
remove |
나머지 요소의 순서에 영향을 미치거나 지정된 값이 없는 새 범위의 끝을 반환하지 않고 지정된 범위에서 지정된 값을 제거합니다. |
remove_copy |
지정된 값의 요소가 복사되지 않고 나머지 요소의 순서를 방해하고 새 대상 범위의 끝을 반환하지 않고 원본 범위에서 대상 범위로 요소를 복사합니다. |
remove_copy_if |
나머지 요소의 순서를 방해하고 새 대상 범위의 끝을 반환하지 않고 조건자를 만족시키는 것이 복사되지 않는다는 점을 제외하고 원본 범위에서 대상 범위로 요소를 복사합니다. |
remove_if |
나머지 요소의 순서에 영향을 미치거나 지정된 값이 없는 새 범위의 끝을 반환하지 않고 지정된 범위에서 조건자를 만족하는 요소를 제거합니다. |
replace |
범위의 각 요소를 검사하고 요소가 지정된 값과 일치하면 대체합니다. |
replace_copy |
소스 범위의 각 요소를 검사하고 요소가 지정된 값과 일치하면 대체하는 동시에 결과를 새 대상 범위로 복사합니다. |
replace_copy_if |
소스 범위의 각 요소를 검사하고 요소가 지정된 조건자를 충족하면 대체하는 동시에 결과를 새 대상 범위로 복사합니다. |
replace_if |
범위의 각 요소를 검사하고 요소가 지정된 조건자를 충족하면 대체합니다. |
reverse |
범위 내에서 요소의 순서를 반대로 바꿉니다. |
reverse_copy |
소스 범위 내의 요소의 순서를 바꾸는 동시에 요소를 대상 범위로 복사합니다. |
rotate |
인접한 두 범위에 있는 요소를 교환합니다. |
rotate_copy |
소스 범위 내의 인접한 두 범위의 요소를 교환하고 결과를 대상 범위로 복사합니다. |
sample |
|
search |
대상 범위 내에서 시퀀스의 요소가 지정된 요소 시퀀스와 동일하거나 이진 조건자가 지정한 의미에 따라 지정된 시퀀스의 요소와 동일한 첫 번째 시퀀스를 검색합니다. |
search_n |
범위에서 특정 값의 요소가 지정된 수만큼 있거나 이진 조건자가 지정한 해당 값과 관련이 있는 첫 번째 하위 시퀀스를 검색합니다. |
set_difference |
한 정렬된 소스 범위에 속하지만 두 번째 정렬된 소스 범위에 속하지 않는 모든 요소를 정렬된 단일 대상 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
set_intersection |
정렬된 두 소스 범위에 속하는 모든 요소를 정렬된 단일 대상 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
set_symmetric_difference |
정렬된 두 소스 범위 중 하나에만 속하는 모든 요소를 정렬된 단일 대상 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
set_union |
정렬된 두 소스 범위 중 하나 이상에 속하는 모든 요소를 정렬된 단일 대상 범위로 결합합니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |
sort |
지정된 범위에 있는 요소를 비내림차순 또는 이진 조건자로 지정한 정렬 기준에 따라 정렬합니다. |
shuffle |
난수 생성기를 사용하여 지정된 범위 내 요소의 순서를 섞습니다(다시 정렬). |
sort_heap |
힙을 정렬된 범위로 변환합니다. |
stable_partition |
범위의 요소를 두 개의 연결되지 않은 집합으로 분류하고, 단항 조건자를 만족하는 요소는 만족하지 않는 요소보다 앞에 오도록 하여 동등한 요소의 상대적 관계를 유지합니다. |
stable_sort |
지정된 범위에 있는 요소를 비내림차순 또는 이진 조건자로 지정한 정렬 기준에 따라 정렬하고 동등한 요소의 상대적 관계를 유지합니다. |
swap |
두 가지 형식의 개체 사이에서 요소 값을 교환하여 첫 번째 개체의 내용을 두 번째 개체에 할당하고 두 번째 개체의 내용을 첫 번째 개체에 할당합니다. |
swap_ranges |
한 범위의 요소를 크기가 동일한 다른 범위의 요소로 교환합니다. |
transform |
두 소스 범위에서 요소 쌍에 또는 소스 범위에 있는 각 요소에 지정된 함수 개체를 적용하고 대상 범위에 함수 개체의 반환 값을 복사합니다. |
unique |
지정된 범위에서 서로 옆에 있는 중복 요소를 제거합니다. |
unique_copy |
원본 범위의 요소를 서로 옆에 있는 중복 요소를 제외하고 대상 범위로 복사합니다. |
upper_bound |
지정된 값보다 큰 값을 갖는 정렬된 범위에 있는 첫 번째 요소의 위치를 찾습니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다. |