<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++