Расширения для диапазонов
Материал из cppreference.com
< cpp | experimental
Расширения C++ для Диапазонов, ISO/IEC ТС 21425:2017, определяют одну модификацию ядра языка и определяют новые компоненты для стандартной библиотеки C++, перечисленные на этой странице.
ТС Диапазонов основана на стандарте C++14, изменённом ТС Концептов.
Изменения ядра языка
ТС Диапазонов изменяет спецификацию основанного на диапазоне цикла for, чтобы разрешить начальный и конечный итераторы разных типов. Это изменение разрешает использование ограничителей и также присутствует в C++17.
Концепты
Концепты ядра языка | |
Определены в заголовочном файле
<experimental/ranges/concepts> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что тип совпадает с другим типом (концепт) | |
| указывает, что тип является производным от другого типа (концепт) | |
| указывает, что тип неявно преобразуется в другой тип (концепт) | |
| указывает, что два типа имеют общий ссылочный тип (концепт) | |
| указывает, что два типа имеют общий тип (концепт) | |
| указывает, что тип является целочисленным типом (концепт) | |
| указывает, что тип является целочисленным типом со знаком (концепт) | |
| указывает, что тип является целочисленным типом без знака (концепт) | |
| указывает, что тип может быть присвоен из другого типа (концепт) | |
| указывает, что тип можно обменять или что два типа можно поменять местами друг с другом (концепт) | |
Концепты сравнения | |
Определены в заголовочном файле
<experimental/ranges/concepts> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что тип может использоваться в Логических контекстах (концепт) | |
указывает, что два типа можно сравнивать на равенство с помощью операторов == и != (концепт) | |
указывает, что оператор == является отношением эквивалентности (концепт) | |
| указывает, что операторы сравнения для типа дают общий порядок (концепт) | |
Концепты объектов | |
Определены в заголовочном файле
<experimental/ranges/concepts> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что объект данного типа может быть уничтожен (концепт) | |
| указывает, что переменная типа может быть создана из набора типов аргументов или привязана к ним (концепт) | |
| указывает, что объект типа может быть сконструирован по умолчанию (концепт) | |
| указывает, что объект типа может быть сконструирован перемещением (концепт) | |
| указывает, что объект типа может быть создан путём копирования и перемещения (концепт) | |
| указывает, что объект типа можно перемещать и менять местами (концепт) | |
| указывает, что объект типа можно копировать, перемещать и менять местами (концепт) | |
| указывает, что объект типа можно копировать, перемещать, менять местами и создавать по умолчанию (концепт) | |
указывает, что тип является регулярным, то есть одновременно и Semiregular и EqualityComparable (концепт) | |
Вызываемые концепты | |
Определены в заголовочном файле
<experimental/ranges/concepts> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что вызываемый тип может быть вызван с заданным набором типов аргументов (концепт) | |
| указывает, что вызываемый тип является логическим предикатом (концепт) | |
| указывает, что вызываемый тип является бинарным отношением (концепт) | |
указывает, что Relation налагает строгий слабый порядок (концепт) | |
Концепты генератора случайных чисел | |
Определены в заголовочном файле
<experimental/ranges/random> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что тип квалифицируется как универсальный генератор случайных чисел (концепт) | |
Основные утилиты
Утилиты компонентов | |
Определены в заголовочном файле
<experimental/ranges/utility> | |
Определены в пространстве имён
std::experimental::ranges | |
| меняет местами значения двух объектов (объект точки настройки) | |
| заменяет аргумент новым значением и возвращает его предыдущее значение (шаблон функции) | |
Объекты функции | |
Определены в заголовочном файле
<experimental/ranges/functional> | |
Определены в пространстве имён
std::experimental::ranges | |
| вызывает объект Callable с заданными аргументами (шаблон функции) | |
объект функция, реализующий x == y (шаблон класса) | |
объект функция, реализующий x != y (шаблон класса) | |
объект функция, реализующий x > y (шаблон класса) | |
объект функция, реализующий x < y (шаблон класса) | |
объект функция, реализующий x >= y (шаблон класса) | |
объект функция, реализующий x <= y (шаблон класса) | |
| объект функция, который возвращает свой аргумент без изменений (класс) | |
Метапрограммирование и свойства типов | |
Определены в заголовочном файле
<experimental/ranges/type_traits> | |
Определены в пространстве имён
std::experimental::ranges | |
| проверяет, можно ли поменять местами объекты одного типа на объекты того же или другого типа (шаблон класса) | |
| определяет общий ссылочный тип набора типов (шаблон класса) | |
| определяет общий тип набора типов (шаблон класса) | |
Помеченные пары и кортежи | |
Определены в заголовочном файле
<experimental/ranges/utility> | |
Определены в пространстве имён
std::experimental::ranges | |
| указывает, что тип является спецификатором тега (концепт) | |
| указывает, что тип представляет спецификатор тега и тип его элемента (концепт) | |
| дополняет кортежный тип именованными элементами доступа (шаблон класса) | |
| псевдоним шаблона для помеченного std::pair (псевдоним шаблона) | |
удобная функция для создания tagged_pair (шаблон функции) | |
Определены в заголовочном файле
<experimental/ranges/tuple> | |
| псевдоним шаблона для помеченного std::tuple (псевдоним шаблона) | |
удобная функция для создания tagged_tuple (шаблон функции) | |
Определены в заголовочном файле
<experimental/ranges/algorithm> | |
Определены в пространстве имён
std::experimental::ranges::tag | |
| спецификаторы тегов для использования с ranges::tagged (класс) | |
Итераторы
Определены в заголовочном файле
<experimental/ranges/iterator> | |
Концепты, связанные с итераторами | |
Определены в пространстве имён
std::experimental::ranges | |
Концепты итераторов | |
указывает, что тип доступен для чтения с помощью оператора * (концепт) | |
| указывает, что значение может быть записано в объект, на который ссылается итератор (концепт) | |
указывает, что тип Semiregular может инкрементироваться с помощью операторов пре- и пост-инкремента (концепт) | |
указывает, что операция инкремента для типа WeaklyIncrementable сохраняет равенство, а этот тип EqualityComparable (концепт) | |
| указывает, что объекты типа могут быть инкрементированы и разыменованы (концепт) | |
указывает, что объект типа является ограничителем для типа Iterator (концепт) | |
указывает, что оператор - может быть применён к итератору и ограничителю для вычисления их разницы за постоянное время (концепт) | |
| указывает, что тип является итератором ввода, то есть значения, на которые он ссылается, могут быть прочитаны, и он может быть как пре- так и пост-инкрементирован (концепт) | |
| указывает, что тип является итератором вывода для данного типа значения, то есть в него могут быть записаны значения этого типа, и он может быть как пре-, так и пост-инкрементирован (концепт) | |
указывает, что InputIterator является прямым итератором, поддерживающим сравнение на равенство и многопроходность (концепт) | |
указывает, что ForwardIterator является двунаправленным итератором, поддерживающим движение назад (концепт) | |
указывает, что BidirectionalIterator это итератор с произвольным доступом, поддерживающий продвижение за постоянное время и индексирование (концепт) | |
Косвенно вызываемые концепты | |
указывает, что вызываемый тип может быть вызван в результате разыменования типа Readable (концепт) | |
указывает, что вызываемый объект при вызове с результатом разыменования типа Readable, соответствует Predicate (концепт) | |
указывает, что вызываемый объект при вызове в результате разыменования некоторых типов Readable, соответствует Relation (концепт) | |
указывает, что вызываемый объект при вызове в результате разыменования некоторых типов Readable, соответствует StrictWeakOrder (концепт) | |
Общие требования к алгоритмам | |
указывает, что значения могут быть перемещены из типа Readable в тип Writable (концепт) | |
указывает, что значения могут быть перемещены из типа Readable в тип Writable и что перемещение может быть выполнено через промежуточный объект (концепт) | |
указывает, что значения могут быть скопированы из типа Readable в тип Writable (концепт) | |
указывает, что значения могут быть скопированы из типа Readable в тип Writable и что копирование может быть выполнено через промежуточный объект (концепт) | |
указывает, что значения, на которые ссылаются два типа Readable, можно поменять местами (концепт) | |
указывает, что значения, на которые ссылаются два типа Readable, можно сравнивать (концепт) | |
| определяет общие требования к алгоритмам, которые меняют порядок элементов на месте (концепт) | |
| определяет требования к алгоритмам, которые объединяют отсортированные последовательности в выходную последовательность путём копирования элементов (концепт) | |
| определяет общие требования алгоритмов, которые переставляют последовательности в упорядоченные последовательности (концепт) | |
Утилиты концептов | |
вычисляет результат вызова вызываемого объекта на результате разыменования некоторого набора типов Readable (шаблон класса) | |
| вспомогательный шаблон для определения ограничений для алгоритмов, принимающих прогнозы (шаблон класса) | |
Примитивы итераторов | |
Утилиты итераторов | |
Определены в пространстве имён
std::experimental::ranges | |
| приводит результат разыменования объекта к связанному с ним ссылочному типу правостороннего значения (объект точки настройки) | |
| меняет местами значения, на которые ссылаются два разыменовываемых объекта (объект точки настройки) | |
Свойства итераторов | |
Определены в пространстве имён
std::experimental::ranges | |
получает разностный тип для типа WeaklyIncrementable (шаблон класса) | |
получает тип значения типа Readable (шаблон класса) | |
| получает категорию итератора для типа итератора ввода (шаблон класса) | |
| класс свойств совместимости, который собирает типы, связанные с итератором (псевдоним шаблона) | |
| получает связанные ссылочные типы разыменовываемого объекта (псевдоним шаблона) | |
Теги категорий итераторов | |
Определены в пространстве имён
std::experimental::ranges | |
| пустые типы классов, используемые для обозначения категорий итераторов (класс) | |
Специализации std::iterator_traits | |
Определены в пространстве имён
std | |
| специализация std::iterator_traits для итераторов ТС диапазонов (специализация шаблона класса) | |
Операции итераторов | |
Определены в пространстве имён
std::experimental::ranges | |
| продвигает итератор на заданное расстояние (шаблон функции) | |
| возвращает расстояние между итератором и ограничителем или между началом и концом диапазона (шаблон функции) | |
| инкрементирует итератор (шаблон функции) | |
| декрементирует итератор (шаблон функции) | |
Адаптеры итераторов | |
Определены в пространстве имён
std::experimental::ranges | |
| адаптер итератора для обхода в обратном порядке (шаблон класса) | |
| адаптер итератора для вставки в конец контейнера (шаблон класса) | |
| адаптер итератора для вставки в начало контейнера (шаблон класса) | |
| адаптер итератора для вставки в контейнер (шаблон класса) | |
| адаптер итератора, который разыменовывается ссылку на правостороннее значение (шаблон класса) | |
адаптер ограничитель для использования с move_iterator (шаблон класса) | |
| адаптирует пару итератор-ограничитель к общему типу итератора для использования с устаревшими алгоритмами (шаблон класса) | |
| адаптер итератора, отслеживающий расстояние от начальной позиции (шаблон класса) | |
| пустой тип ограничителя для использования с типами итераторов, которые знают границы своего диапазона (класс) | |
| оболочка для возможно висячего итератора (шаблон класса) | |
псевдоним шаблона, который обертывает тип итератора диапазона rvalue с висячими (псевдоним шаблона) | |
| тип ограничителя, используемый с любым итератором для обозначения бесконечного диапазона (класс) | |
Итераторы потоков | |
Определены в пространстве имён
std::experimental::ranges | |
| итератор ввода, который читает из std::basic_istream (шаблон класса) | |
| итератор вывода, записывающий в std::basic_ostream (шаблон класса) | |
| итератор ввода, который читает из std::basic_streambuf (шаблон класса) | |
| итератор вывода, записывающий в std::basic_streambuf (шаблон класса) | |
Диапазоны
Определены в заголовочном файле
<experimental/ranges/range> | |
Концепты диапазонов | |
указывает, что тип является диапазоном, то есть предоставляет итератор begin и ограничитель end (концепт) | |
| указывает, что диапазон узнаёт свой размер за константное время (концепт) | |
| указывает, что диапазон является представлением, то есть имеет константное время копирования/перемещения/присвоения (концепт) | |
| указывает, что диапазон имеет идентичные типы итератора и ограничителя (концепт) | |
указывает диапазон, тип итератора которого соответствует InputIterator (концепт) | |
указывает диапазон, тип итератора которого соответствует OutputIterator (концепт) | |
указывает диапазон, тип итератора которого соответствует ForwardIterator (концепт) | |
указывает диапазон, тип итератора которого соответствует BidirectionalIterator (концепт) | |
указывает диапазон, тип итератора которого соответствует RandomAccessIterator (концепт) | |
Доступ к диапазону | |
Определены в пространстве имён
std::experimental::ranges | |
| возвращает итератор на начало диапазона (объект точки настройки) | |
| возвращает итератор на конец диапазона (объект точки настройки) | |
| возвращает обратный итератор на диапазон (объект точки настройки) | |
| возвращает обратный конечный итератор диапазона (объект точки настройки) | |
Примитивы диапазонов | |
Определены в пространстве имён
std::experimental::ranges | |
| получает размер диапазона, который может быть вычислен за постоянное время (объект точки настройки) | |
| проверяет, пуст ли диапазон (объект точки настройки) | |
| получает указатель на начало непрерывного диапазона (объект точки настройки) | |
| получает типы итератора и ограничителя диапазона (псевдоним шаблона) | |
Алгоритмы
Определены в заголовочном файле
<experimental/ranges/algorithm> | |
Немодифицирующие операции над последовательностями | |
Определены в пространстве имён
std::experimental::ranges | |
проверяет, равен ли предикат true для всех, любого или ни одного из элементов в диапазоне (шаблон функции) | |
| применяет функцию к диапазону элементов (шаблон функции) | |
| возвращает количество элементов, соответствующих определённым критериям (шаблон функции) | |
| находит первую позицию, в которой два диапазона различаются (шаблон функции) | |
| определяет, являются ли два набора элементов одинаковыми (шаблон функции) | |
| возвращает истину, если один диапазон лексикографически меньше другого (шаблон функции) | |
| находит первый элемент, соответствующий определённым критериям (шаблон функции) | |
| находит последнюю последовательность элементов в определённом диапазоне (шаблон функции) | |
| ищет любой из набора элементов (шаблон функции) | |
| находит первые два соседних элемента, которые равны (или соответствуют заданному предикату) (шаблон функции) | |
| ищет диапазон элементов (шаблон функции) | |
| ищет несколько последовательных копий элемента в диапазоне (шаблон функции) | |
Модифицирующие операции над последовательностями | |
Определены в пространстве имён
std::experimental::ranges | |
| копирует диапазон элементов в новое место (шаблон функции) | |
| копирует ряд элементов в новое место (шаблон функции) | |
| копирует диапазон элементов в обратном порядке (шаблон функции) | |
| перемещает ряд элементов в новое место (шаблон функции) | |
| перемещает диапазон элементов в новое место в обратном порядке (шаблон функции) | |
| присваивает диапазону элементов определённое значение (шаблон функции) | |
| присваивает значение ряду элементов (шаблон функции) | |
| применяет функцию к диапазону элементов (шаблон функции) | |
| сохраняет результат функции в диапазоне (шаблон функции) | |
| сохраняет результат N применений функции (шаблон функции) | |
| удаляет элементы, соответствующие определённым критериям (шаблон функции) | |
| копирует диапазон элементов, исключая те, которые соответствуют определенным критериям (шаблон функции) | |
| заменяет все значения, соответствующие определённым критериям, другим значением (шаблон функции) | |
| копирует диапазон, заменяя элементы, соответствующие определённым критериям, другим значением (шаблон функции) | |
| меняет местами два диапазона элементов (шаблон функции) | |
| меняет порядок элементов в диапазоне (шаблон функции) | |
| создает перевёрнутую копию диапазона (шаблон функции) | |
| меняет порядок элементов в диапазоне (шаблон функции) | |
| копирует и переворачивает диапазон элементов (шаблон функции) | |
| случайным образом переупорядочивает элементы в диапазоне (шаблон функции) | |
| удаляет последовательные повторяющиеся элементы в диапазоне (шаблон функции) | |
| создаёт копию некоторого диапазона элементов, не содержащую последовательных дубликатов (шаблон функции) | |
Операции разметки | |
Определены в пространстве имён
std::experimental::ranges | |
| определяет, разделён ли диапазон заданным предикатом (шаблон функции) | |
| делит диапазон элементов на две группы (шаблон функции) | |
| копирует диапазон, разделяя элементы на две группы (шаблон функции) | |
| делит элементы на две группы с сохранением их относительного порядка (шаблон функции) | |
| находит точку раздела разделённого диапазона (шаблон функции) | |
Операции сортировки | |
Определены в пространстве имён
std::experimental::ranges | |
| проверяет, отсортирован ли диапазон по возрастанию (шаблон функции) | |
| находит самый большой отсортированный поддиапазон (шаблон функции) | |
| сортирует диапазон в порядке возрастания (шаблон функции) | |
| сортирует первые N элементов диапазона (шаблон функции) | |
| копирует и частично сортирует диапазон элементов (шаблон функции) | |
| сортирует диапазон элементов, сохраняя порядок между равными элементами (шаблон функции) | |
| частично сортирует заданный диапазон, убедившись, что он разделён заданным элементом (шаблон функции) | |
Операции двоичного поиска (по отсортированным диапазонам) | |
Определены в пространстве имён
std::experimental::ranges | |
| возвращает итератор на первый элемент не меньший, чем заданное значение (шаблон функции) | |
| возвращает итератор на первый элемент, который больше определённого значения (шаблон функции) | |
| определяет, существует ли элемент в определённом диапазоне (шаблон функции) | |
| возвращает диапазон элементов, соответствующих определённому ключу (шаблон функции) | |
Операции с наборами (в отсортированных диапазонах) | |
Определены в пространстве имён
std::experimental::ranges | |
| объединяет два отсортированных диапазона (шаблон функции) | |
| объединяет два упорядоченных диапазона на месте (шаблон функции) | |
| возвращает true, если один набор является подмножеством другого (шаблон функции) | |
| вычисляет разницу между двумя наборами (шаблон функции) | |
| вычисляет пересечение двух множеств (шаблон функции) | |
| вычисляет симметричную разницу между двумя наборами (шаблон функции) | |
| вычисляет объединение двух наборов (шаблон функции) | |
Операции с кучей | |
Определены в пространстве имён
std::experimental::ranges | |
| проверяет, является ли данный диапазон максимальной кучей (шаблон функции) | |
| находит самый большой поддиапазон, который составляет максимальную кучу (шаблон функции) | |
| создаёт максимальную кучу из диапазона элементов (шаблон функции) | |
| добавляет элемент в максимальную кучу (шаблон функции) | |
| удаляет самый большой элемент из максимальной кучи (шаблон функции) | |
| превращает максимальную кучу в диапазон элементов, отсортированных в порядке возрастания (шаблон функции) | |
Операции минимума/максимума | |
Определены в пространстве имён
std::experimental::ranges | |
| возвращает большее из заданных значений (шаблон функции) | |
| возвращает самый большой элемент в диапазоне (шаблон функции) | |
| возвращает меньшее из заданных значений (шаблон функции) | |
| возвращает наименьший элемент в диапазоне (шаблон функции) | |
| возвращает меньший и больший из двух элементов (шаблон функции) | |
| возвращает самый маленький и самый большой элементы в диапазоне (шаблон функции) | |
Операции перестановки | |
Определены в пространстве имён
std::experimental::ranges | |
| определяет, является ли последовательность перестановкой другой последовательности (шаблон функции) | |
| генерирует следующую большую лексикографическую перестановку диапазона элементов (шаблон функции) | |
| генерирует следующую меньшую лексикографическую перестановку диапазона элементов (шаблон функции) | |