다음을 통해 공유


<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_elementmax_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 지정된 값보다 큰 값을 갖는 정렬된 범위에 있는 첫 번째 요소의 위치를 찾습니다. 정렬 기준은 이진 조건자로 지정할 수 있습니다.

참고 항목

헤더 파일 참조
C++ 표준 라이브러리의 스레드 보안
C++ 표준 라이브러리 참조