Поделиться через


<algorithm>

Определяет функции шаблона контейнера стандартной библиотеки C++, которые выполняют алгоритмы.

Синтаксис

(see links below for specific algorithm syntax)

Примечание.

Библиотека <algorithm> также использует инструкцию #include <initializer_list> .

Замечания

Алгоритмы стандартной библиотеки C++ могут работать с различными структурами данных. Структуры данных, с которыми они могут работать, включают не только классы контейнеров стандартной библиотеки C++, такие как vector и , но и 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-й элемент последовательности в диапазоне, чтобы все элементы перед ним были меньше или равны ему, а все элементы в последовательности после него больше либо равны ему.
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++