Algorithms library
Библиотека алгоритмов определяет функции для различных целей (например, поиск, сортировка, подсчет, манипуляции), которые работают с диапазонами элементов. Обратите внимание, что
диапазон
определяется как
[
first
,
last
)
где
last
ссылается на элемент
после
последнего элемента для проверки или модификации.
Ограниченные алгоритмы (начиная с C++20)
C++20 предоставляет
ограниченные
версии большинства алгоритмов в пространстве имён
std::ranges
. В этих алгоритмах
диапазон
может быть указан либо как пара
итератор
-
страж
, либо как единственный аргумент
range
, а также поддерживаются проекции и вызываемые объекты типа указатель-на-член. Дополнительно,
типы возвращаемых значений
большинства алгоритмов были изменены для возврата всей потенциально полезной информации, вычисленной во время выполнения алгоритма.
std::vector<int> v{7, 1, 4, 0, -1}; std::ranges::sort(v); // ограниченный алгоритм
Политики выполнения (начиная с C++17)
Большинство алгоритмов имеют перегруженные версии, принимающие политики выполнения. Стандартные библиотечные алгоритмы поддерживают несколько политик выполнения , и библиотека предоставляет соответствующие типы и объекты политик выполнения. Пользователи могут выбрать политику выполнения статически, вызывая параллельный алгоритм с объектом политики выполнения соответствующего типа.
Реализации стандартной библиотеки (но не пользователи) могут определять дополнительные политики выполнения в качестве расширения. Семантика параллельных алгоритмов, вызываемых с объектом политики выполнения типа, определённого реализацией, определяется реализацией.
Параллельные версии алгоритмов (за исключением
std::for_each
и
std::for_each_n
) могут создавать произвольные копии элементов из диапазонов при условии, что оба условия
std::
is_trivially_copy_constructible_v
<
T
>
и
std::
is_trivially_destructible_v
<
T
>
имеют значение
true
, где
T
представляет тип элементов.
|
Определено в заголовочном файле
<execution>
|
|
|
Определено в пространстве имен
std::execution
|
|
|
(C++17)
(C++17)
(C++17)
(C++20)
|
типы политик выполнения
(класс) |
|
(C++17)
(C++17)
(C++17)
(C++20)
|
глобальные объекты политик выполнения
(константа) |
|
Определено в пространстве имен
std
|
|
|
(C++17)
|
проверяет, представляет ли класс политику выполнения
(шаблон класса) |
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_parallel_algorithm
|
201603L
|
(C++17) | Параллельные алгоритмы |
__cpp_lib_execution
|
201603L
|
(C++17) | Политики выполнения |
201902L
|
(C++20) | std::execution::unsequenced_policy |
Немодифицирующие операции над последовательностями
Пакетные операции
|
Определено в заголовочном файле
<algorithm>
|
|
|
применяет унарный
функциональный объект
к элементам из
диапазона
(шаблон функции) |
|
|
(C++20)
|
применяет унарный
функциональный объект
к элементам из
диапазона
(функциональный объект алгоритма) |
|
(C++17)
|
применяет функциональный объект к первым N элементам последовательности
(шаблон функции) |
|
(C++20)
|
применяет функциональный объект к первым N элементам последовательности
(функциональный объект алгоритма) |
Операции поиска
|
Определено в заголовочном файле
<algorithm>
|
|
|
(C++11)
(C++11)
(C++11)
|
проверяет, является ли предикат
true
для всех, любого или ни одного из элементов в диапазоне
(шаблон функции) |
|
(C++20)
(C++20)
(C++20)
|
проверяет, является ли предикат
true
для всех, любого или ни одного из элементов в диапазоне
(функциональный объект алгоритма) |
|
(C++23)
(C++23)
|
проверяет, содержит ли диапазон заданный элемент или поддиапазон
(объект-функция алгоритма) |
|
(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++20)
|
находит первую позицию, в которой два диапазона различаются
(функциональный объект алгоритма) |
|
определяет, являются ли два набора элементов одинаковыми
(шаблон функции) |
|
|
(C++20)
|
определяет, являются ли два набора элементов одинаковыми
(функциональный объект алгоритма) |
|
выполняет поиск первого вхождения диапазона элементов
(шаблон функции) |
|
|
(C++20)
|
выполняет поиск первого вхождения диапазона элементов
(функциональный объект алгоритма) |
|
ищет первое вхождение заданного количества последовательных копий элемента в диапазоне
(шаблон функции) |
|
|
(C++20)
|
ищет первое вхождение заданного количества последовательных копий элемента в диапазоне
(функциональный объект алгоритма) |
|
(C++23)
|
проверяет, начинается ли диапазон с другого диапазона
(функциональный объект алгоритма) |
|
(C++23)
|
проверяет, заканчивается ли диапазон другим диапазоном
(функциональный объект алгоритма) |
Сворачивающие операции (начиная с C++23)
|
Определено в заголовочном файле
<algorithm>
|
|
|
(C++23)
|
левостороннее свертывание диапазона элементов
(объект-функция алгоритма) |
|
(C++23)
|
левостороннее свертывание диапазона элементов с использованием первого элемента в качестве начального значения
(объект-функция алгоритма) |
|
(C++23)
|
правостороннее свертывание диапазона элементов
(объект-функция алгоритма) |
|
(C++23)
|
правостороннее свертывание диапазона элементов с использованием последнего элемента в качестве начального значения
(объект-функция алгоритма) |
|
(C++23)
|
левостороннее свертывание диапазона элементов и возврат
пары
(итератор, значение)
(объект-функция алгоритма) |
|
левостороннее свертывание диапазона элементов с использованием первого элемента в качестве начального значения и возврат
пары
(итератор,
optional
)
(объект-функция алгоритма) |
|
Операции модификации последовательностей
Операции копирования
|
Определено в заголовке
<algorithm>
|
|
|
(C++11)
|
копирует диапазон элементов в новое место
(шаблон функции) |
|
(C++20)
(C++20)
|
копирует диапазон элементов в новое место
(функциональный объект алгоритма) |
|
(C++11)
|
копирует указанное количество элементов в новое место
(шаблон функции) |
|
(C++20)
|
копирует указанное количество элементов в новое место
(функциональный объект алгоритма) |
|
копирует диапазон элементов в обратном порядке
(шаблон функции) |
|
|
(C++20)
|
копирует диапазон элементов в обратном порядке
(функциональный объект алгоритма) |
|
(C++11)
|
перемещает диапазон элементов в новое место
(шаблон функции) |
|
(C++20)
|
перемещает диапазон элементов в новое место
(функциональный объект алгоритма) |
|
(C++11)
|
перемещает диапазон элементов в новое место в обратном порядке
(шаблон функции) |
|
(C++20)
|
перемещает диапазон элементов в новое место в обратном порядке
(функциональный объект алгоритма) |
Операции обмена
|
Определено в заголовочном файле
<string_view>
|
|
|
обменивает значения двух объектов
(шаблон функции) |
|
|
Определено в заголовочном файле
<algorithm>
|
|
|
обменивает два диапазона элементов
(шаблон функции) |
|
|
(C++20)
|
обменивает два диапазона элементов
(функциональный объект алгоритма) |
|
обменивает элементы, на которые указывают два итератора
(шаблон функции) |
|
Операции преобразования
|
Определено в заголовочном файле
<algorithm>
|
|
|
применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне
(шаблон функции) |
|
|
(C++20)
|
применяет функцию к диапазону элементов
(функциональный объект алгоритма) |
|
заменяет все значения, удовлетворяющие определенным критериям, другим значением
(шаблон функции) |
|
|
(C++20)
(C++20)
|
заменяет все значения, удовлетворяющие определенным критериям, другим значением
(функциональный объект алгоритма) |
|
копирует диапазон, заменяя элементы, удовлетворяющие определенным критериям, другим значением
(шаблон функции) |
|
|
(C++20)
(C++20)
|
копирует диапазон, заменяя элементы, удовлетворяющие определенным критериям, другим значением
(функциональный объект алгоритма) |
Операции генерации
|
Определено в заголовке
<algorithm>
|
|
|
копирует-присваивает заданное значение каждому элементу в диапазоне
(шаблон функции) |
|
|
(C++20)
|
присваивает диапазону элементов определенное значение
(функциональный объект алгоритма) |
|
копирует-присваивает заданное значение N элементам в диапазоне
(шаблон функции) |
|
|
(C++20)
|
присваивает значение определенному количеству элементов
(функциональный объект алгоритма) |
|
присваивает результаты последовательных вызовов функции каждому элементу в диапазоне
(шаблон функции) |
|
|
(C++20)
|
сохраняет результат функции в диапазоне
(функциональный объект алгоритма) |
|
присваивает результаты последовательных вызовов функции N элементам в диапазоне
(шаблон функции) |
|
|
(C++20)
|
сохраняет результат N применений функции
(функциональный объект алгоритма) |
Операции удаления
|
Определено в заголовочном файле
<algorithm>
|
|
|
удаляет элементы, удовлетворяющие определенным критериям
(шаблон функции) |
|
|
(C++20)
(C++20)
|
удаляет элементы, удовлетворяющие определенным критериям
(функциональный объект алгоритма) |
|
копирует диапазон элементов, пропуская те, которые удовлетворяют определенным критериям
(шаблон функции) |
|
|
(C++20)
(C++20)
|
копирует диапазон элементов, пропуская те, которые удовлетворяют определенным критериям
(функциональный объект алгоритма) |
|
удаляет последовательные дублирующиеся элементы в диапазоне
(шаблон функции) |
|
|
(C++20)
|
удаляет последовательные дублирующиеся элементы в диапазоне
(функциональный объект алгоритма) |
|
создает копию некоторого диапазона элементов, не содержащую последовательных дубликатов
(шаблон функции) |
|
|
(C++20)
|
создает копию некоторого диапазона элементов, не содержащую последовательных дубликатов
(функциональный объект алгоритма) |
Операции изменения порядка
|
Определено в заголовочном файле
<algorithm>
|
|
|
изменяет порядок элементов в диапазоне на обратный
(шаблон функции) |
|
|
(C++20)
|
изменяет порядок элементов в диапазоне на обратный
(объект-функция алгоритма) |
|
создает копию диапазона с обратным порядком элементов
(шаблон функции) |
|
|
(C++20)
|
создает копию диапазона с обратным порядком элементов
(объект-функция алгоритма) |
|
циклически сдвигает элементы в диапазоне
(шаблон функции) |
|
|
(C++20)
|
циклически сдвигает элементы в диапазоне
(объект-функция алгоритма) |
|
копирует и циклически сдвигает элементы диапазона
(шаблон функции) |
|
|
(C++20)
|
копирует и циклически сдвигает элементы диапазона
(объект-функция алгоритма) |
|
(C++20)
|
сдвигает элементы в диапазоне
(шаблон функции) |
|
сдвигает элементы в диапазоне
(объект-функция алгоритма) |
|
|
(до C++17)
(C++11)
|
случайным образом переупорядочивает элементы в диапазоне
(шаблон функции) |
|
(C++20)
|
случайным образом переупорядочивает элементы в диапазоне
(объект-функция алгоритма) |
Операции выборки
|
Определено в заголовочном файле
<algorithm>
|
|
|
(C++17)
|
выбирает N случайных элементов из последовательности
(шаблон функции) |
|
(C++20)
|
выбирает N случайных элементов из последовательности
(функциональный объект алгоритма) |
Требования
Некоторые алгоритмы требуют, чтобы последовательность, представленная аргументами, была «отсортирована» или «разделена». Поведение не определено, если требование не выполняется.
|
Последовательность является отсортированной относительно компаратора comp если для каждого итератора iter указывающего на последовательность и каждого неотрицательного целого числа n такого что iter + n [1] является валидным итератором указывающим на элемент последовательности, comp ( * ( iter + n ) , * iter ) == false [1] . |
(до C++20) |
|
Последовательность является
отсортированной относительно
comp
и
proj
для компаратора
comp
и проекции
proj
если для каждого итератора
iter
указывающего на последовательность и каждого неотрицательного целого числа
n
такого что
iter
+
n
[1]
является валидным итератором указывающим на элемент последовательности,
bool
(
std::
invoke
(
comp,
std::
invoke
(
proj,
*
(
iter
+
n
)
)
,
Последовательность является отсортированной относительно компаратора comp если последовательность отсортирована относительно comp и std:: identity { } (проекции идентичности). |
(начиная с C++20) |
Последовательность
[
start
,
finish
)
является
разделённой относительно выражения
f
(
e
)
если существует целое число
n
такое, что для всех
i
в
[
0
,
std::
distance
(
start, finish
)
)
,
f
(
*
(
start
+
i
)
)
[1]
равно
true
тогда и только тогда, когда
i
<
n
.
- ↑ 1.0 1.1 1.2 1.3 1.4 iter + n просто означает «результат iter после n инкрементов», независимо от того, является ли iter итератором произвольного доступа.
Операции разделения
|
Определено в заголовочном файле
<algorithm>
|
|
|
(C++11)
|
определяет, разделен ли диапазон заданным предикатом
(шаблон функции) |
|
(C++20)
|
определяет, разделен ли диапазон заданным предикатом
(объект-функция алгоритма) |
|
разделяет диапазон элементов на две группы
(шаблон функции) |
|
|
(C++20)
|
разделяет диапазон элементов на две группы
(объект-функция алгоритма) |
|
(C++11)
|
копирует диапазон, разделяя элементы на две группы
(шаблон функции) |
|
(C++20)
|
копирует диапазон, разделяя элементы на две группы
(объект-функция алгоритма) |
|
разделяет элементы на две группы, сохраняя их относительный порядок
(шаблон функции) |
|
|
(C++20)
|
разделяет элементы на две группы, сохраняя их относительный порядок
(объект-функция алгоритма) |
|
(C++11)
|
находит точку разделения разделенного диапазона
(шаблон функции) |
|
(C++20)
|
находит точку разделения разделенного диапазона
(объект-функция алгоритма) |
Операции сортировки
|
Определено в заголовочном файле
<algorithm>
|
|
|
сортирует диапазон в порядке возрастания
(шаблон функции) |
|
|
(C++20)
|
сортирует диапазон в порядке возрастания
(функциональный объект алгоритма) |
|
сортирует диапазон элементов, сохраняя порядок между равными элементами
(шаблон функции) |
|
|
(C++20)
|
сортирует диапазон элементов, сохраняя порядок между равными элементами
(функциональный объект алгоритма) |
|
сортирует первые N элементов диапазона
(шаблон функции) |
|
|
(C++20)
|
сортирует первые N элементов диапазона
(функциональный объект алгоритма) |
|
копирует и частично сортирует диапазон элементов
(шаблон функции) |
|
|
(C++20)
|
копирует и частично сортирует диапазон элементов
(функциональный объект алгоритма) |
|
(C++11)
|
проверяет, отсортирован ли диапазон в порядке возрастания
(шаблон функции) |
|
(C++20)
|
проверяет, отсортирован ли диапазон в порядке возрастания
(функциональный объект алгоритма) |
|
(C++11)
|
находит наибольший отсортированный поддиапазон
(шаблон функции) |
|
(C++20)
|
находит наибольший отсортированный поддиапазон
(функциональный объект алгоритма) |
|
частично сортирует заданный диапазон, обеспечивая его разделение по заданному элементу
(шаблон функции) |
|
|
(C++20)
|
частично сортирует заданный диапазон, обеспечивая его разделение по заданному элементу
(функциональный объект алгоритма) |
Операции двоичного поиска (на разделённых диапазонах)
|
Определено в заголовочном файле
<algorithm>
|
|
|
возвращает итератор на первый элемент
не меньший
заданного значения
(шаблон функции) |
|
|
(C++20)
|
возвращает итератор на первый элемент
не меньший
заданного значения
(объект-функция алгоритма) |
|
возвращает итератор на первый элемент
больший
определённого значения
(шаблон функции) |
|
|
(C++20)
|
возвращает итератор на первый элемент
больший
определённого значения
(объект-функция алгоритма) |
|
возвращает диапазон элементов, соответствующих определённому ключу
(шаблон функции) |
|
|
(C++20)
|
возвращает диапазон элементов, соответствующих определённому ключу
(объект-функция алгоритма) |
|
определяет, существует ли элемент в частично упорядоченном диапазоне
(шаблон функции) |
|
|
(C++20)
|
определяет, существует ли элемент в частично упорядоченном диапазоне
(объект-функция алгоритма) |
Операции с множествами (на отсортированных диапазонах)
|
Определено в заголовке
<algorithm>
|
|
|
возвращает
true
если одна последовательность является подпоследовательностью другой
(шаблон функции) |
|
|
(C++20)
|
возвращает
true
если одна последовательность является подпоследовательностью другой
(объект-функция алгоритма) |
|
вычисляет объединение двух множеств
(шаблон функции) |
|
|
(C++20)
|
вычисляет объединение двух множеств
(объект-функция алгоритма) |
|
вычисляет пересечение двух множеств
(шаблон функции) |
|
|
(C++20)
|
вычисляет пересечение двух множеств
(объект-функция алгоритма) |
|
вычисляет разность двух множеств
(шаблон функции) |
|
|
(C++20)
|
вычисляет разность двух множеств
(объект-функция алгоритма) |
|
вычисляет симметрическую разность двух множеств
(шаблон функции) |
|
|
(C++20)
|
вычисляет симметрическую разность двух множеств
(объект-функция алгоритма) |
Операции слияния (для отсортированных диапазонов)
|
Определено в заголовочном файле
<algorithm>
|
|
|
объединяет два отсортированных диапазона
(шаблон функции) |
|
|
(C++20)
|
объединяет два отсортированных диапазона
(функциональный объект алгоритма) |
|
объединяет два упорядоченных диапазона на месте
(шаблон функции) |
|
|
(C++20)
|
объединяет два упорядоченных диапазона на месте
(функциональный объект алгоритма) |
Операции с кучей
|
Произвольный доступный
диапазон
|
(до C++20) |
|
Произвольный доступный
диапазон
Произвольный доступный
диапазон
|
(начиная с C++20) |
Куча может быть создана с помощью std::make_heap и ranges::make_heap (начиная с C++20) .
Для получения дополнительных свойств кучи см. max heap .
|
Определено в заголовочном файле
<algorithm>
|
|
|
добавляет элемент в max heap
(шаблон функции) |
|
|
(C++20)
|
добавляет элемент в max heap
(функциональный объект алгоритма) |
|
удаляет наибольший элемент из max heap
(шаблон функции) |
|
|
(C++20)
|
удаляет наибольший элемент из max heap
(функциональный объект алгоритма) |
|
создает max heap из диапазона элементов
(шаблон функции) |
|
|
(C++20)
|
создает max heap из диапазона элементов
(функциональный объект алгоритма) |
|
преобразует max heap в диапазон элементов, отсортированных в порядке возрастания
(шаблон функции) |
|
|
(C++20)
|
преобразует max heap в диапазон элементов, отсортированных в порядке возрастания
(функциональный объект алгоритма) |
|
(C++11)
|
проверяет, является ли заданный диапазон max heap
(шаблон функции) |
|
(C++20)
|
проверяет, является ли заданный диапазон max heap
(функциональный объект алгоритма) |
|
(C++11)
|
находит наибольший поддиапазон, который является max heap
(шаблон функции) |
|
(C++20)
|
находит наибольший поддиапазон, который является max heap
(функциональный объект алгоритма) |
Операции минимума/максимума
|
Определено в заголовочном файле
<algorithm>
|
|
|
возвращает большее из заданных значений
(шаблон функции) |
|
|
(C++20)
|
возвращает большее из заданных значений
(функциональный объект алгоритма) |
|
возвращает наибольший элемент в диапазоне
(шаблон функции) |
|
|
(C++20)
|
возвращает наибольший элемент в диапазоне
(функциональный объект алгоритма) |
|
возвращает меньшее из заданных значений
(шаблон функции) |
|
|
(C++20)
|
возвращает меньшее из заданных значений
(функциональный объект алгоритма) |
|
возвращает наименьший элемент в диапазоне
(шаблон функции) |
|
|
(C++20)
|
возвращает наименьший элемент в диапазоне
(функциональный объект алгоритма) |
|
(C++11)
|
возвращает меньшее и большее из двух элементов
(шаблон функции) |
|
(C++20)
|
возвращает меньшее и большее из двух элементов
(функциональный объект алгоритма) |
|
(C++11)
|
возвращает наименьший и наибольший элементы в диапазоне
(шаблон функции) |
|
(C++20)
|
возвращает наименьший и наибольший элементы в диапазоне
(функциональный объект алгоритма) |
|
(C++17)
|
ограничивает значение между парой граничных значений
(шаблон функции) |
|
(C++20)
|
ограничивает значение между парой граничных значений
(функциональный объект алгоритма) |
Лексикографические операции сравнения
|
Определено в заголовочном файле
<algorithm>
|
|
|
возвращает
true
если один диапазон лексикографически меньше другого
(шаблон функции) |
|
|
(C++20)
|
возвращает
true
если один диапазон лексикографически меньше другого
(функциональный объект алгоритма) |
|
сравнивает два диапазона с использованием трёхстороннего сравнения
(шаблон функции) |
|
Операции перестановки
|
Определено в заголовочном файле
<algorithm>
|
|
|
генерирует следующую большую лексикографическую перестановку диапазона элементов
(шаблон функции) |
|
|
(C++20)
|
генерирует следующую большую лексикографическую перестановку диапазона элементов
(функциональный объект алгоритма) |
|
генерирует следующую меньшую лексикографическую перестановку диапазона элементов
(шаблон функции) |
|
|
(C++20)
|
генерирует следующую меньшую лексикографическую перестановку диапазона элементов
(функциональный объект алгоритма) |
|
(C++11)
|
определяет, является ли последовательность перестановкой другой последовательности
(шаблон функции) |
|
(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)
|
применяет вызываемый объект, затем выполняет редукцию без сохранения порядка
(шаблон функции) |
|
(C++17)
|
применяет вызываемый объект, затем вычисляет исключающее сканирование
(шаблон функции) |
|
(C++17)
|
применяет вызываемый объект, затем вычисляет включающее сканирование
(шаблон функции) |
Операции с неинициализированной памятью
|
Определено в заголовочном файле
<memory>
|
|
|
копирует диапазон объектов в неинициализированную область памяти
(шаблон функции) |
|
|
(C++20)
|
копирует диапазон объектов в неинициализированную область памяти
(объект-функция алгоритма) |
|
(C++11)
|
копирует несколько объектов в неинициализированную область памяти
(шаблон функции) |
|
(C++20)
|
копирует несколько объектов в неинициализированную область памяти
(объект-функция алгоритма) |
|
копирует объект в неинициализированную область памяти, заданную диапазоном
(шаблон функции) |
|
|
(C++20)
|
копирует объект в неинициализированную область памяти, определяемую диапазоном
(объект-функция алгоритма) |
|
копирует объект в неинициализированную область памяти, определяемую началом и количеством
(шаблон функции) |
|
|
(C++20)
|
копирует объект в неинициализированную область памяти, определяемую началом и количеством
(функциональный объект алгоритма) |
|
(C++17)
|
перемещает диапазон объектов в неинициализированную область памяти
(шаблон функции) |
|
(C++20)
|
перемещает диапазон объектов в неинициализированную область памяти
(функциональный объект алгоритма) |
|
(C++17)
|
перемещает ряд объектов в неинициализированную область памяти
(шаблон функции) |
|
(C++20)
|
перемещает несколько объектов в неинициализированную область памяти
(объект-функция алгоритма) |
|
(C++17)
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) |
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, заданной диапазоном
(объект-функция алгоритма) |
|
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, заданной началом и количеством
(шаблон функции) |
|
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, заданной началом и количеством
(функциональный объект алгоритма) |
|
|
(C++17)
|
создаёт объекты с помощью
value-initialization
в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) |
|
создаёт объекты с помощью
value-initialization
в неинициализированной области памяти, определённой диапазоном
(функциональный объект алгоритма) |
|
|
(C++17)
|
создаёт объекты с помощью
value-initialization
в неинициализированной области памяти, заданной началом и количеством
(шаблон функции) |
|
создаёт объекты с помощью
value-initialization
в неинициализированной области памяти, заданной началом и количеством
(функциональный объект алгоритма) |
|
|
(C++17)
|
уничтожает диапазон объектов
(шаблон функции) |
|
(C++20)
|
уничтожает диапазон объектов
(функциональный объект алгоритма) |
|
(C++17)
|
уничтожает ряд объектов в диапазоне
(шаблон функции) |
|
(C++20)
|
уничтожает несколько объектов в диапазоне
(функциональный объект алгоритма) |
|
(C++17)
|
уничтожает объект по заданному адресу
(шаблон функции) |
|
(C++20)
|
уничтожает объект по заданному адресу
(функциональный объект алгоритма) |
|
(C++20)
|
создает объект по заданному адресу
(function template) |
|
(C++20)
|
создает объект по заданному адресу
(функциональный объект алгоритма) |
Генерация случайных чисел (since C++26)
|
Определено в заголовке
<random>
|
|
|
(C++26)
|
заполняет диапазон случайными числами из равномерного генератора случайных битов
(функциональный объект алгоритма) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_algorithm_iterator_requirements
|
202207L
|
(C++23) | Итераторы диапазонов как входные данные для алгоритмов не-диапазонов |
__cpp_lib_clamp
|
201603L
|
(C++17) | std::clamp |
__cpp_lib_constexpr_algorithms
|
201806L
|
(C++20) | Constexpr для алгоритмов |
202306L
|
(C++26) | Constexpr стабильная сортировка | |
__cpp_lib_algorithm_default_value_type
|
202403L
|
(C++26) | Списковая инициализация для алгоритмов |
__cpp_lib_freestanding_algorithm
|
202311L
|
(C++26) | Автономные средства в <algorithm> |
__cpp_lib_robust_nonmodifying_seq_ops
|
201304L
|
(C++14) | Повышение надежности немодифицирующих последовательных операций (перегрузки для двух диапазонов std::mismatch , std::equal и std::is_permutation) |
__cpp_lib_sample
|
201603L
|
(C++17) | std::sample |
__cpp_lib_shift
|
201806L
|
(C++20) | std::shift_left и std::shift_right |
Библиотека C
|
Определено в заголовочном файле
<cstdlib>
|
|
|
сортирует диапазон элементов с неуказанным типом
(функция) |
|
|
выполняет поиск элемента с неуказанным типом в массиве
(функция) |
|
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 193 | C++98 | heap required * first to be the largest element |
there can be elements
equal to * first |
| LWG 2150 | C++98 | the definition of a sorted sequence was incorrect | corrected |
| LWG 2166 | C++98 |
the heap requirement did not match the
definition of max heap closely enough |
requirement improved |
Смотрите также
|
C documentation
для
Algorithms
|