Spec-Zone.ru › C++

Ограниченные алгоритмы (с C++20)

C++20 предоставляет ограниченные версии большинства алгоритмов в пространстве имён std::ranges. В этих алгоритмах диапазон может быть задан как пара итератор-конец или как единственный аргумент в виде range, и поддерживаются проекции и вызываемые указатели на члены. Кроме того, типы возвращаемых значений большинства алгоритмов были изменены, чтобы возвращать всю потенциально полезную информацию, вычисленную во время выполнения алгоритма.

Ограниченные алгоритмы

Определено в заголовке <algorithm>
Определено в пространстве имён std::ranges
Операции над последовательностями без изменения
ranges::all_ofranges::any_ofranges::none_of
(C++20)(C++20)(C++20)
проверяет, является ли предикат true для всех, некоторых или ни одного из элементов в диапазоне
(niebloid)
ranges::for_each
(C++20)
применяет функцию к диапазону элементов
(niebloid)
ranges::for_each_n
(C++20)
применяет объект-функцию к первым N элементам последовательности
(niebloid)
ranges::countranges::count_if
(C++20)(C++20)
возвращает количество элементов, удовлетворяющих определённым условиям
(niebloid)
ranges::mismatch
(C++20)
находит первую позицию, где два диапазона различаются
(niebloid)
ranges::equal
(C++20)
определяет, являются ли два набора элементов одинаковыми
(niebloid)
ranges::lexicographical_compare
(C++20)
возвращает значение true, если один диапазон лексикографически меньше другого
(niebloid)
ranges::findranges::find_ifranges::find_if_not
(C++20)(C++20)(C++20)
находит первый элемент, удовлетворяющий определённым условиям
(niebloid)
ranges::find_lastranges::find_last_ifranges::find_last_if_not
(C++23)(C++23)(C++23)
находит последний элемент, удовлетворяющий определённым условиям
(niebloid)
ranges::find_end
(C++20)
находит последнее вхождение последовательности элементов в определённом диапазоне
(niebloid)
ranges::find_first_of
(C++20)
ищет любой из элементов из заданного набора
(niebloid)
ranges::adjacent_find
(C++20)
находит первые два соседних элемента, которые равны (или удовлетворяют заданному предикату)
(niebloid)
ranges::search
(C++20)
ищет диапазон элементов
(niebloid)
ranges::search_n
(C++20)
ищет заданное количество последовательных копий элемента в диапазоне
(niebloid)
ranges::containsranges::contains_subrange
(C++23)(C++23)
проверяет, содержит ли диапазон заданный элемент или поддиапазон
(niebloid)
ranges::starts_with
(C++23)
проверяет, начинается ли диапазон с другого диапазона
(niebloid)
ranges::ends_with
(C++23)
проверяет, заканчивается ли диапазон другим диапазоном
(niebloid)
Операции над последовательностями с изменением
ranges::copyranges::copy_if
(C++20)(C++20)
копирует диапазон элементов в новое местоположение
(niebloid)
ranges::copy_n
(C++20)
копирует определённое количество элементов в новое местоположение
(niebloid)
ranges::copy_backward
(C++20)
копирует диапазон элементов в обратном порядке
(niebloid)
ranges::move
(C++20)
перемещает диапазон элементов в новое местоположение
(niebloid)
ranges::move_backward
(C++20)
перемещает диапазон элементов в новое местоположение в обратном порядке
(niebloid)
ranges::fill
(C++20)
присваивает диапазону элементов определённое значение
(niebloid)
ranges::fill_n
(C++20)
присваивает значение определённому количеству элементов
(niebloid)
ranges::transform
(C++20)
применяет функцию к диапазону элементов
(niebloid)
ranges::generate
(C++20)
сохраняет результат функции в диапазоне
(niebloid)
ranges::generate_n
(C++20)
сохраняет результат N применений функции
(niebloid)
ranges::removeranges::remove_if
(C++20)(C++20)
удаляет элементы, удовлетворяющие определённым критериям
(niebloid)
ranges::remove_copyranges::remove_copy_if
(C++20)(C++20)
копирует диапазон элементов, опуская те, которые удовлетворяют определённым критериям
(niebloid)
ranges::replaceranges::replace_if
(C++20)(C++20)
заменяет все значения, удовлетворяющие определённым критериям, на другое значение
(niebloid)
ranges::replace_copyranges::replace_copy_if
(C++20)(C++20)
копирует диапазон, заменяя элементы, удовлетворяющие определённым критериям, на другое значение
(niebloid)
ranges::swap_ranges
(C++20)
меняет местами два диапазона элементов
(niebloid)
ranges::reverse
(C++20)
изменяет порядок элементов в диапазоне на обратный
(niebloid)
ranges::reverse_copy
(C++20)
создаёт копию диапазона с обратным порядком элементов
(niebloid)
ranges::rotate
(C++20)
вращает порядок элементов в диапазоне
(niebloid)
ranges::rotate_copy
(C++20)
копирует и вращает диапазон элементов
(niebloid)
ranges::shuffle
(C++20)
случайным образом изменяет порядок элементов в диапазоне
(niebloid)
ranges::shift_leftranges::shift_right
(C++23)
сдвигает элементы в диапазоне
(niebloid)
ranges::sample
(C++20)
выбирает N случайных элементов из последовательности
(niebloid)
ranges::unique
(C++20)
удаляет последовательные дублирующиеся элементы в диапазоне
(niebloid)
ranges::unique_copy
(C++20)
создаёт копию диапазона, исключая последовательные дублирующиеся элементы
(niebloid)
Операции разбиения
ranges::is_partitioned
(C++20)
определяет, является ли диапазон разнесённым заданным предикатом
(niebloid)
ranges::partition
(C++20)
разделяет диапазон элементов на две группы
(niebloid)
ranges::partition_copy
(C++20)
копирует диапазон, разделяя элементы на две группы
(niebloid)
ranges::stable_partition
(C++20)
разделяет элементы на две группы, сохраняя их относительный порядок
(niebloid)
ranges::partition_point
(C++20)
находит точку разбиения разнесённого диапазона
(niebloid)
Операции сортировки
ranges::is_sorted
(C++20)
проверяет, отсортирован ли диапазон в порядке возрастания
(niebloid)
ranges::is_sorted_until
(C++20)
находит наибольший отсортированный поддиапазон
(niebloid)
ranges::sort
(C++20)
сортирует диапазон в порядке возрастания
(niebloid)
ranges::partial_sort
(C++20)
сортирует первые N элементов диапазона
(niebloid)
ranges::partial_sort_copy
(C++20)
копирует и частично сортирует диапазон элементов
(niebloid)
ranges::stable_sort
(C++20)
сортирует диапазон элементов, сохраняя порядок между равными элементами
(niebloid)
ranges::nth_element
(C++20)
частично сортирует данный диапазон, гарантируя, что он разнесён заданным элементом
(niebloid)
Операции бинарного поиска (для отсортированных диапазонов)
ranges::lower_bound
(C++20)
возвращает итератор на первый элемент, не меньший заданного значения
(niebloid)
ranges::upper_bound
(C++20)
возвращает итератор на первый элемент, больший определённого значения
(niebloid)
ranges::binary_search
(C++20)
определяет, существует ли элемент в частично упорядоченном диапазоне
(niebloid)
ranges::equal_range
(C++20)
возвращает диапазон элементов, соответствующих определенному ключу
(niebloid)
Операции над множествами (с отсортированными диапазонами)
ranges::merge
(C++20)
объединяет два отсортированных диапазона
(niebloid)
ranges::inplace_merge
(C++20)
объединяет два упорядоченных диапазона на месте
(niebloid)
ranges::includes
(C++20)
возвращает true , если одна последовательность является подпоследовательностью другой
(niebloid)
ranges::set_difference
(C++20)
вычисляет разность двух множеств
(niebloid)
ranges::set_intersection
(C++20)
вычисляет пересечение двух множеств
(niebloid)
ranges::set_symmetric_difference
(C++20)
вычисляет симметрическую разность двух множеств
(niebloid)
ranges::set_union
(C++20)
вычисляет объединение двух множеств
(niebloid)
Операции с кучей
ranges::is_heap
(C++20)
проверяет, является ли данный диапазон максимальной кучей
(niebloid)
ranges::is_heap_until
(C++20)
находит наибольший поддиапазон, являющийся максимальной кучей
(niebloid)
ranges::make_heap
(C++20)
создаёт максимальную кучу из диапазона элементов
(niebloid)
ranges::push_heap
(C++20)
добавляет элемент в максимальную кучу
(niebloid)
ranges::pop_heap
(C++20)
удаляет наибольший элемент из максимальной кучи
(niebloid)
ranges::sort_heap
(C++20)
преобразует максимальную кучу в диапазон элементов, отсортированных по возрастанию
(niebloid)
Операции с минимумом/максимумом
ranges::max
(C++20)
возвращает большее из заданных значений
(niebloid)
ranges::max_element
(C++20)
возвращает наибольший элемент в диапазоне
(niebloid)
ranges::min
(C++20)
возвращает меньшее из заданных значений
(niebloid)
ranges::min_element
(C++20)
возвращает наименьший элемент в диапазоне
(niebloid)
ranges::minmax
(C++20)
возвращает меньшее и большее из двух элементов
(niebloid)
ranges::minmax_element
(C++20)
возвращает наименьший и наибольший элементы в диапазоне
(niebloid)
ranges::clamp
(C++20)
ограничение значения между парой граничных значений
(niebloid)
Операции с перестановками
ranges::is_permutation
(C++20)
определяет, является ли последовательность перестановкой другой последовательности
(niebloid)
ranges::next_permutation
(C++20)
генерирует следующую большую лексикографическую перестановку диапазона элементов
(niebloid)
ranges::prev_permutation
(C++20)
генерирует предыдущую меньшую лексикографическую перестановку диапазона элементов
(niebloid)

Ограниченные числовые операции

Определено в заголовке <numeric>
Определено в пространстве имён std::ranges
ranges::iota
(C++23)
заполняет диапазон последовательными приращениями начального значения
(niebloid)

Ограниченные операции слияния

Определено в заголовке <algorithm>
Определено в пространстве имён std::ranges
ranges::fold_left
(C++23)
слева-складывает диапазон элементов
(niebloid)
ranges::fold_left_first
(C++23)
слева-складывает диапазон элементов, используя первый элемент в качестве начального значения
(niebloid)
ranges::fold_right
(C++23)
справа-складывает диапазон элементов
(niebloid)
ranges::fold_right_last
(C++23)
справа-складывает диапазон элементов, используя последний элемент в качестве начального значения
(niebloid)
ranges::fold_left_with_iter
(C++23)
слева-складывает диапазон элементов и возвращает пару (итератор, значение)
(niebloid)
ranges::fold_left_first_with_iter
(C++23)
слева-складывает диапазон элементов, используя первый элемент в качестве начального значения, и возвращает пару (итератор, optional)
(niebloid)

Алгоритмы для ограниченной неинициализированной памяти

Определено в заголовке <memory>
Определено в пространстве имён std::ranges
ranges::uninitialized_copy
(C++20)
копирует диапазон объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_copy_n
(C++20)
копирует определённое количество объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_fill
(C++20)
копирует объект в неинициализированную область памяти, определённую диапазоном
(niebloid)
ranges::uninitialized_fill_n
(C++20)
копирует объект в неинициализированную область памяти, определённую началом и количеством
(niebloid)
ranges::uninitialized_move
(C++20)
перемещает диапазон объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_move_n
(C++20)
перемещает определённое количество объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_default_construct
(C++20)
создаёт объекты по умолчанию в неинициализированной области памяти, определённой диапазоном
(niebloid)
ranges::uninitialized_default_construct_n
(C++20)
создаёт объекты по умолчанию в неинициализированной области памяти, определённой началом и количеством
(niebloid)
ranges::uninitialized_value_construct
(C++20)
создаёт объекты по значению в неинициализированной области памяти, определённой диапазоном
(niebloid)
ranges::uninitialized_value_construct_n
(C++20)
создаёт объекты по значению в неинициализированной области памяти, определённой началом и количеством
(niebloid)
ranges::destroy
(C++20)
удаляет диапазон объектов
(niebloid)
ranges::destroy_n
(C++20)
удаляет определённое количество объектов в диапазоне
(niebloid)
ranges::destroy_at
(C++20)
удаляет объект по указанному адресу
(niebloid)
ranges::construct_at
(C++20)
создаёт объект по указанному адресу
(niebloid)

Типы возвращаемых значений

Определено в заголовке <algorithm>
Определено в пространстве имён std::ranges
ranges::in_fun_result
(C++20)
предоставляет способ хранения итератора и объекта функции как единого целого
(шаблон класса)
ranges::in_in_result
(C++20)
предоставляет способ хранения двух итераторов как единого целого
(шаблон класса)
ranges::in_out_result
(C++20)
предоставляет способ хранения двух итераторов как единого целого
(шаблон класса)
ranges::in_in_out_result
(C++20)
предоставляет способ хранения трёх итераторов как единого целого
(шаблон класса)
ranges::in_out_out_result
(C++20)
предоставляет способ хранения трёх итераторов как единого целого
(шаблон класса)
ranges::min_max_result
(C++20)
предоставляет способ хранения двух объектов или ссылок одного типа как единого целого
(шаблон класса)
ranges::in_found_result
(C++20)
предоставляет способ хранения итератора и флага булевого типа как единого целого
(шаблон класса)
ranges::in_value_result
(C++23)
предоставляет способ хранения итератора и значения как единого целого
(шаблон класса)
ranges::out_value_result
(C++23)
предоставляет способ хранения итератора и значения как единого целого
(шаблон класса)

Примечания

Макрос проверки наличия функции Значение Стандарт Функция
__cpp_lib_ranges 201911L (C++20) Библиотека диапазонов и ограниченные алгоритмы
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges алгоритмы fold
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with, std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left и std::shift_right
202202L (C++23) std::ranges::shift_left и std::ranges::shift_right

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm/ranges

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API