Библиотека алгоритмов
Библиотека алгоритмов определяет функции для различных целей (например, поиск, сортировка, подсчёт, манипулирование), которые работают с диапазонами элементов. Обратите внимание, что диапазон определяется как [первый, последний), где последний ссылается на элемент, который находится после последнего элемента, который нужно проверить или изменить.
Ограниченные алгоритмыC++20 предоставляет ограниченные версии большинства алгоритмов в пространстве имён std::vector<int> v {7, 1, 4, 0, -1};
std::ranges::sort(v); // ограниченный алгоритм
|
(начиная с C++20) |
Политики исполненияБольшинство алгоритмов имеют перегрузки, которые принимают политики выполнения. Алгоритмы стандартной библиотеки поддерживают несколько политик выполнения, а библиотека предоставляет соответствующие типы и объекты политик выполнения. Пользователи могут выбирать политику выполнения статически, вызывая параллельный алгоритм с объектом политики выполнения соответствующего типа. Реализации стандартной библиотеки (но не пользователи) могут определять дополнительные политики выполнения как расширение. Семантика параллельных алгоритмов, вызываемых с помощью объекта политики выполнения типа, определяемого реализацией, определяется реализацией. В параллельных версиях алгоритмов (кроме std::for_each и std::for_each_n) разрешено создавать произвольные копии элементов из диапазонов, если оба
|
(начиная с C++17) | |||||||||||||||||||||||||||
Немодифицирующие операции над последовательностями | |
Определены в заголовочном файле
<algorithm> | |
(C++11)(C++11)(C++11) |
проверяет, равен ли предикат true для всех, любого или ни одного из элементов в диапазоне (шаблон функции) |
(C++20)(C++20)(C++20) |
проверяет, равен ли предикат true для всех, любого или ни одного из элементов в диапазоне (ниблоид) |
| применяет функцию к диапазону элементов (шаблон функции) | |
(C++20) |
применяет функцию к диапазону элементов (ниблоид) |
(C++17) |
применяет объект функцию к первым n элементам последовательности (шаблон функции) |
(C++20) |
применяет объект функцию к первым n элементам последовательности (ниблоид) |
| возвращает количество элементов, соответствующих определённым критериям (шаблон функции) | |
(C++20)(C++20) |
возвращает количество элементов, соответствующих определённым критериям (ниблоид) |
| находит первую позицию, в которой два диапазона различаются (шаблон функции) | |
(C++20) |
находит первую позицию, в которой два диапазона различаются (ниблоид) |
(C++11) |
находит первый элемент, соответствущий определённым критериям (шаблон функции) |
(C++20)(C++20)(C++20) |
находит первый элемент, соответствующий определённым критериям (ниблоид) |
(C++23)(C++23)(C++23) |
находит последний элемент, соответствующий определённым критериям (ниблоид) |
| находит последнюю последовательность элементов в определённом диапазоне (шаблон функции) | |
(C++20) |
находит последнюю последовательность элементов в определённом диапазоне (ниблоид) |
| ищет любой элемент из набора элементов (шаблон функции) | |
(C++20) |
ищет любой элемент из набора элементов (ниблоид) |
| находит первые два соседних элемента, которые равны (или удовлетворяют заданному предикату) (шаблон функции) | |
(C++20) |
находит первые два соседних элемента, которые равны (или соответствуют заданному предикату) (ниблоид) |
| ищет диапазон элементов (шаблон функции) | |
(C++20) |
ищет диапазон элементов (ниблоид) |
| ищет несколько последовательных копий элемента в диапазоне (шаблон функции) | |
(C++20) |
ищет несколько последовательных копий элемента в диапазоне (ниблоид) |
(C++23) |
проверяет, начинается ли диапазон с другого диапазона (ниблоид) |
(C++23) |
проверяет, заканчивается ли диапазон другим диапазоном (ниблоид) |
Модифицирующие операции над последовательностями | |
Определены в заголовочном файле
<algorithm> | |
(C++11) |
копирует диапазон элементов в новое место (шаблон функции) |
(C++20)(C++20) |
копирует диапазон элементов в новое место (ниблоид) |
(C++11) |
копирует ряд элементов в новое место (шаблон функции) |
(C++20) |
копирует ряд элементов в новое место (ниблоид) |
| копирует диапазон элементов в обратном порядке (шаблон функции) | |
(C++20) |
копирует диапазон элементов в обратном порядке (ниблоид) |
(C++11) |
перемещает диапазон элементов в новое место (шаблон функции) |
(C++20) |
перемещает дипазон элементов в новое место (ниблоид) |
(C++11) |
перемещает диапазон элементов в новое место в обратном порядке (шаблон функции) |
(C++20) |
перемещает диапазон элементов в новое место в обратном порядке (ниблоид) |
| присваивает диапазону элементов определённое значение (шаблон функции) | |
(C++20) |
присваивает диапазону элементов определённое значение (ниблоид) |
| присваивает значение определённому количеству элементов (шаблон функции) | |
(C++20) |
присваивает значение определённому количеству элементов (ниблоид) |
| применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне (шаблон функции) | |
(C++20) |
применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне (ниблоид) |
| присваивает результаты последовательных вызовов функции каждому элементу в диапазоне (шаблон функции) | |
(C++20) |
присваивает результаты последовательных вызовов функции каждому элементу в диапазоне (ниблоид) |
| присваивает результаты последовательных вызовов функции N элементам в диапазоне (шаблон функции) | |
(C++20) |
сохраняет результат N применений функции (ниблоид) |
| удаляет элементы, соответствующие определённым критериям (шаблон функции) | |
(C++20)(C++20) |
удаляет элементы, соответствующие определённым критериям (ниблоид) |
| копирует диапазон элементов, исключая те, которые соответствуют определённым критериям (шаблон функции) | |
(C++20)(C++20) |
копирует диапазон элементов, исключая те, которые соответствуют определённым критериям (ниблоид) |
| заменяет другим значением все значения, соответствующие определённым критериям (шаблон функции) | |
(C++20)(C++20) |
заменяет другим значением все значения, соответствующие определённым критериям (ниблоид) |
| копирует диапазон, заменяя элементы, соответствующие определённым критериям, другим значением (шаблон функции) | |
(C++20)(C++20) |
копирует диапазон, заменяя элементы, соответствующие определённым критериям, другим значением (ниблоид) |
| меняет местами значения двух объектов (шаблон функции) | |
| меняет местами два диапазона элементов (шаблон функции) | |
(C++20) |
меняет местами два диапазона элементов (ниблоид) |
| меняет местами элементы, на которые указывают два итератора (шаблон функции) | |
| меняет порядок элементов в диапазоне на обратный (шаблон функции) | |
(C++20) |
меняет порядок элементов в диапазоне на обратный (ниблоид) |
| создаёт перевёрнутую копию диапазона (шаблон функции) | |
(C++20) |
создаёт перевёрнутую копию диапазона (ниблоид) |
| вращает порядок элементов в диапазоне (шаблон функции) | |
(C++20) |
вращает порядок элементов в диапазоне (ниблоид) |
| копирует и вращает диапазон элементов (шаблон функции) | |
(C++20) |
копирует и вращает диапазон элементов (ниблоид) |
(C++20) |
сдвигает элементы в диапазоне (шаблон функции) |
(до C++17)(C++11) |
случайным образом переупорядочивает элементы в диапазоне (шаблон функции) |
(C++20) |
случайным образом переупорядочивает элементы в диапазоне (ниблоид) |
(C++17) |
выбирает n случайных элементов из последовательности (шаблон функции) |
(C++20) |
выбирает n случайных элементов из последовательности (ниблоид) |
| удаляет последовательные повторяющиеся элементы в диапазоне (шаблон функции) | |
(C++20) |
удаляет последовательные повторяющиеся элементы в диапазоне (ниблоид) |
| создает копию некоторого диапазона элементов, не содержащую последовательных дубликатов (шаблон функции) | |
(C++20) |
создаёт копию некоторого диапазона элементов, не содержащую последовательных дубликатов (ниблоид) |
Операции разбиения | |
Определены в заголовочном файле
<algorithm> | |
(C++11) |
определяет, разделён ли диапазон заданным предикатом (шаблон функции) |
(C++20) |
определяет, разделён ли диапазон заданным предикатом (ниблоид) |
| делит диапазон элементов на две группы (шаблон функции) | |
(C++20) |
делит диапазон элементов на две группы (ниблоид) |
(C++11) |
копирует диапазон, разделяя элементы на две группы (шаблон функции) |
(C++20) |
копирует диапазон, разделяя элементы на две группы (ниблоид) |
| делит элементы на две группы с сохранением их относительного порядка (шаблон функции) | |
(C++20) |
делит элементы на две группы с сохранением их относительного порядка (ниблоид) |
(C++11) |
находит точку раздела разделённого на две группы диапазона (шаблон функции) |
(C++20) |
находит точку раздела разделённого на две группы диапазона (ниблоид) |
Операции сортировки | |
Определены в заголовочном файле
<algorithm> | |
(C++11) |
проверяет, отсортирован ли диапазон по возрастанию (шаблон функции) |
(C++20) |
проверяет, отсортирован ли диапазон по возрастанию (ниблоид) |
(C++11) |
находит наиболее длинный отсортированный префиксный поддиапазон (шаблон функции) |
(C++20) |
находит наибольший отсортированный поддиапазон (ниблоид) |
| сортирует диапазон в порядке возрастания (шаблон функции) | |
(C++20) |
сортирует диапазон в порядке возрастания (ниблоид) |
| сортирует первые N элементов диапазона (шаблон функции) | |
(C++20) |
сортирует первые N элементов диапазона (ниблоид) |
| копирует и частично сортирует диапазон элементов (шаблон функции) | |
(C++20) |
копирует диапазон, разделяя элементы на две группы (ниблоид) |
| сортирует диапазон элементов, сохраняя порядок между равными элементами (шаблон функции) | |
(C++20) |
сортирует диапазон элементов, сохраняя порядок между равными элементами (ниблоид) |
| частично сортирует заданный диапазон, убедившись, что он разделён заданным элементом (шаблон функции) | |
(C++20) |
частично сортирует заданный диапазон, убедившись, что он разделён заданным элементом (ниблоид) |
Операции двоичного поиска (по отсортированным диапазонам) | |
Определены в заголовочном файле
<algorithm> | |
| возвращает итератор на первый элемент не меньший, чем заданное значение (шаблон функции) | |
(C++20) |
возвращает итератор на первый элемент не меньший, чем заданное значение (ниблоид) |
| возвращает итератор на первый элемент, который больше определённого значения (шаблон функции) | |
(C++20) |
возвращает итератор на первый элемент, который больше определённого значения (ниблоид) |
| определяет, существует ли элемент в частично упорядоченном диапазоне (шаблон функции) | |
(C++20) |
определяет, существует ли элемент в частично упорядоченном диапазоне (ниблоид) |
| возвращает диапазон элементов, соответствующих определённому ключу (шаблон функции) | |
(C++20) |
возвращает диапазон элементов, соответствующих определённому ключу (ниблоид) |
Другие операции с отсортированными диапазонами | |
Определены в заголовочном файле
<algorithm> | |
| объединяет два отсортированных диапазона (шаблон функции) | |
(C++20) |
объединяет два отсортированных диапазона (ниблоид) |
| объединяет два упорядоченных диапазона на месте (шаблон функции) | |
(C++20) |
объединяет два упорядоченных диапазона на месте (ниблоид) |
Операции с наборами (в отсортированных диапазонах) | |
Определены в заголовочном файле
<algorithm> | |
возвращает true, если одна последовательность является подпоследовательностью другой (шаблон функции) | |
(C++20) |
возвращает true, если одна последовательность является подпоследовательностью другой (ниблоид) |
| вычисляет разницу между двумя наборами (шаблон функции) | |
(C++20) |
вычисляет разницу между двумя наборами (ниблоид) |
| вычисляет пересечение двух множеств (шаблон функции) | |
(C++20) |
вычисляет пересечение двух множеств (ниблоид) |
| вычисляет симметричную разницу между двумя наборами (шаблон функции) | |
| вычисляет симметричную разницу между двумя наборами (ниблоид) | |
| вычисляет объединение двух множеств (шаблон функции) | |
(C++20) |
вычисляет объединение двух множеств (ниблоид) |
Операции с кучей | |
Определены в заголовочном файле
<algorithm> | |
| проверяет, является ли указанный диапазон максимальной кучей (шаблон функции) | |
(C++20) |
проверяет, является ли указанный диапазон максимальной кучей (ниблоид) |
(C++11) |
находит самый большой поддиапазон, который составляет максимальную кучу (шаблон функции) |
(C++20) |
находит самый большой поддиапазон, который составляет максимальную кучу (ниблоид) |
| создаёт максимальную кучу из диапазона элементов (шаблон функции) | |
(C++20) |
создаёт максимальную кучу из диапазона элементов (ниблоид) |
| добавляет элемент в максимальную кучу (шаблон функции) | |
(C++20) |
добавляет элемент в максимальную кучу (ниблоид) |
| удаляет наибольший элемент из максимальной кучи (шаблон функции) | |
(C++20) |
удаляет наибольший элемент из максимальной кучи (ниблоид) |
| превращает максимальную кучу в диапазон элементов, отсортированных в порядке возрастания (шаблон функции) | |
(C++20) |
превращает максимальную кучу в диапазон элементов, отсортированных в порядке возрастания (ниблоид) |
Операции минимума/максимума | |
Определены в заголовочном файле
<algorithm> | |
| возвращает большее из заданных значений (шаблон функции) | |
(C++20) |
возвращает большее из заданных значений (ниблоид) |
| возвращает наибольший элемент в диапазоне (шаблон функции) | |
(C++20) |
возвращает наибольший элемент в диапазоне (ниблоид) |
| возвращает меньшее из заданных значений (шаблон функции) | |
(C++20) |
возвращает меньшее из заданных значений (ниблоид) |
| возвращает наименьший элемент в диапазоне (шаблон функции) | |
(C++20) |
возвращает наименьший элемент в диапазоне (ниблоид) |
(C++11) |
возвращает меньший и больший из двух элементов (шаблон функции) |
(C++20) |
возвращает меньший и больший из двух элементов (ниблоид) |
(C++11) |
возвращает наименьший и наибольший элементы в диапазоне (шаблон функции) |
(C++20) |
возвращает наименьший и наибольший элементы в диапазоне (ниблоид) |
(C++17) |
приводит значение к диапазону между парой граничных значений (шаблон функции) |
(C++20) |
фиксирует значение между парой граничных значений (ниблоид) |
Операции сравнения | |
Определены в заголовочном файле
<algorithm> | |
| определяет, одинаковы ли два множества элементов (шаблон функции) | |
(C++20) |
определяет, одинаковы ли два множества элементов (ниблоид) |
возвращает true, если один диапазон лексикографически меньше другого (шаблон функции) | |
возвращает true, если один диапазон лексикографически меньше другого (ниблоид) | |
| сравнивает два диапазона, используя трёхстороннее сравнение (шаблон функции) | |
Операции перестановки | |
Определены в заголовочном файле
<algorithm> | |
(C++11) |
определяет, является ли последовательность перестановкой другой последовательности (шаблон функции) |
(C++20) |
определяет, является ли последовательность перестановкой другой последовательности (ниблоид) |
| генерирует следующую большую лексикографическую перестановку диапазона элементов (шаблон функции) | |
(C++20) |
генерирует следующую большую лексикографическую перестановку диапазона элементов (ниблоид) |
| генерирует следующую меньшую лексикографическую перестановку диапазона элементов (шаблон функции) | |
(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) |
применяет invocable, reduces не по порядку (шаблон функции) |
(C++17) |
применяет вызываемый объект, затем вычисляет exclusive scan (шаблон функции) |
(C++17) |
применяет вызываемый объект, затем вычисляет inclusive scan (шаблон функции) |
Операции с неинициализированной памятью | |
Определены в заголовочном файле
<memory> | |
| копирует диапазон объектов в неинициализированную область памяти (шаблон функции) | |
(C++20) |
копирует диапазон объектов в неинициализированную область памяти (ниблоид) |
(C++11) |
копирует ряд объектов в неинициализированную область памяти (шаблон функции) |
(C++20) |
копирует ряд объектов в неинициализированную область памяти (ниблоид) |
| копирует объект в неинициализированную область памяти, определяемую диапазоном (шаблон функции) | |
(C++20) |
копирует объект в неинициализированную область памяти, определяемую диапазоном (ниблоид) |
| копирует объект в неинициализированную область памяти, определяемую началом и количеством (шаблон функции) | |
(C++20) |
копирует объект в неинициализированную область памяти, определяемую началом и количеством (ниблоид) |
(C++17) |
перемещает диапазон объектов в неинициализированную область памяти (шаблон функции) |
(C++20) |
перемещает диапазон объектов в неинициализированную область памяти (ниблоид) |
(C++17) |
перемещает ряд объектов в неинициализированную область памяти (шаблон функции) |
(C++20) |
перемещает ряд объектов в неинициализированную область памяти (ниблоид) |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством (шаблон функции) | |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой началом и количеством (шаблон функции) | |
| создаёт объекты инициализированные значением в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
(C++17) |
уничтожает диапазон объектов (шаблон функции) |
(C++20) |
уничтожает диапазон объектов (ниблоид) |
(C++17) |
уничтожает несколько объектов в диапазоне (шаблон функции) |
(C++20) |
уничтожает несколько объектов в диапазоне (ниблоид) |
(C++17) |
уничтожает объект по заданному адресу (шаблон функции) |
(C++20) |
уничтожает объект по заданному адресу (ниблоид) |
(C++20) |
создаёт объект по заданному адресу (шаблон функции) |
(C++20) |
создаёт объект по заданному адресу (ниблоид) |
Библиотека C | |
Определены в заголовочном файле
<cstdlib> | |
| сортирует диапазон элементов с неопределённым типом (функция) | |
| ищет в массиве элемент любого типа (функция) | |
Смотрите также
Документация C по Алгоритмы
|