Библиотека диапазонов (C++20)
Библиотека диапазонов содержит компоненты для работы с колекциями элементов, включая различные виды адаптеров.
| Определён в заголовочном файле <ranges>
|
||
| namespace std { namespace views = ranges::views; |
||
Псевдоним пространства имен std::views предоставляется как краткое описание для std::ranges::views.
| Заголовочный файл
<ranges> | ||
| Пространство имён
std::ranges | ||
Доступ к диапазонам | ||
| (C++20) |
Возвращает итератор на начало диапазона (объект точки настройки) | |
| (C++20) |
Возвращает итератор на конец диапазона (объект точки настройки) | |
| (C++20) |
возвращает обратный итератор на диапазон (объект точки настройки) | |
Примитивы диапазона | ||
Управление "повисшим" итератором | ||
Концепция диапазона | ||
Представления | ||
[править] Фабрики диапазона
Шаблон:cpp/ranges/dsc empty viewШаблон:cpp/ranges/dsc single viewШаблон:cpp/ranges/dsc iota viewШаблон:cpp/ranges/dsc view counted| Заголовочный файл
<ranges> | |
| Пространство имён
std::ranges |
[править] Адаптеры диапазона
Адаптеры диапазона принимают viewable_range в качестве первых аргументов и возвращают view.
Если адаптер принимает только один аргумент, его также можно вызвать с помощью оператора |(вертикальная черта): если C объект адаптера диапазона, а R viewable_range, то эти два выражения эквивалентны:
C(R) R | C
Унарные адаптеры диапазона также могут быть связаны цепью для создания другого адаптера диапазона: если C и D являются объектами адаптера диапазона, а R является viewable_range, то C | D также является объектом адаптера диапазона, и эти два выражения эквивалентны:
R | C | D // (R | C) | D R | (C | D)
Если адаптер принимает несколько аргументов, эти формы эквивалентны:
adaptor(range, args...) adaptor(args...)(range) range | adaptor(args...)
В этом случае, adaptor(args...) является объектом унарного диапазона.
Шаблон:cpp/ranges/dsc all viewШаблон:cpp/ranges/dsc ref viewШаблон:cpp/ranges/dsc filter viewШаблон:cpp/ranges/dsc transform viewШаблон:cpp/ranges/dsc take viewШаблон:cpp/ranges/dsc take while viewШаблон:cpp/ranges/dsc drop viewШаблон:cpp/ranges/dsc drop while viewШаблон:cpp/ranges/dsc join viewШаблон:cpp/ranges/dsc split viewШаблон:cpp/ranges/dsc common viewШаблон:cpp/ranges/dsc reverse viewШаблон:cpp/ranges/dsc basic istream viewШаблон:cpp/ranges/dsc elements viewШаблон:cpp/ranges/dsc keys viewШаблон:cpp/ranges/dsc values view| Заголовочный файл
<ranges> | |
| Пространство имён
std::ranges |
Некоторые адаптеры диапазона оборачивают свой элемент или функциональный объект полурегулярной оберткой.
[править] Концепция помощника
Следующие концепции используются только для экспозиции нескольких типов, но они не являются частями интерфейса стандартной библиотеки.
| template<class R> concept __SimpleView = // exposition only |
||
| template<class T, class U> concept __NotSameAs = // exposition only |
||
[править] Пример
#include <vector> #include <ranges> #include <iostream> int main() { std::vector<int> ints{0,1,2,3,4,5}; auto even = [](int i){ return 0 == i % 2; }; auto square = [](int i) { return i * i; }; for (int i : ints | std::views::filter(even) | std::views::transform(square)) { std::cout << i << ' '; } }
Вывод:
0 4 16

