std::ranges::views::iota, std::ranges::iota_view, std::ranges::views::indices
Определён в заголовочном файле <ranges> | ||
|---|---|---|
template< std::weakly_incrementable W,
std::semiregular Bound = std::unreachable_sentinel_t >
requires /*weakly-equality-comparable-with*/<W, Bound> && std::copyable<W>
class iota_view
: public ranges::view_interface<iota_view<W, Bound>>
| (1) | (начиная с C++20) |
namespace views {
inline constexpr /* unspecified */ iota = /* unspecified */;
}
| (2) | (начиная с C++20) |
namespace views {
inline constexpr /* unspecified */ indices = /* unspecified */;
}
| (3) | (начиная с C++26) |
| Сигнатура вызова | ||
template< class W >
requires /* see below */
constexpr /* see below */ iota( W&& value );
| (начиная с C++20) | |
template< class W, class Bound >
requires /* see below */
constexpr /* see below */ iota( W&& value, Bound&& bound );
| (начиная с C++20) | |
template< class T >
requires /*is-integer-like*/<T>
constexpr /* see below */ indices( T bound );
| (начиная с C++26) |
views::iota(e) и views::iota(e, f) эквивалентны по выражению соответственно iota_view<std::decay_t<decltype((e))>>(e) и iota_view(e, f) для любых подходящих подвыражений e и f.T — это std::remove_cvref_t<decltype((e))>. Тогда views::indices(e) эквивалентно по выражению views::iota(T(0), e) для любого подходящего подвыражения e, если T является целочисленным типом.Объекты-точки настройки
Имя views::iota обозначает объект-точку настройки — константный функциональный объект типа класса литерального типа semiregular. Подробности см. в описании CustomizationPointObject.
| Имя | (начиная с C++26) |
Члены-данные
| Член | Описание |
|---|---|
W value_ | начальное значение (объект-член, используемый только для описания*) |
Bound bound_ | значение-сторож, может быть недостижимым (объект-член, используемый только для описания*) |
Функции-члены
создаёт iota_view (открытая функция-член) |
|
получает итератор начала iota_view (открытая функция-член) |
|
получает значение-сторож, обозначающее конец iota_view (открытая функция-член) |
|
проверяет, пуст ли iota_view (то есть равны ли итератор и значение-сторож) (открытая функция-член) |
|
|
(необязательно) | получает размер iota_view (предоставляется только для ограниченного диапазона) (открытая функция-член) |
Унаследовано от |
|
|
(C++23) | возвращает константный итератор на начало диапазона (открытая функция-член std::ranges::view_interface<D>) |
|
(C++23) | возвращает значение-сторож для константного итератора диапазона (открытая функция-член std::ranges::view_interface<D>) |
возвращает, не является ли производное представление пустым; предоставляется только если к нему применимо ranges::empty (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает первый элемент производного представления, если оно удовлетворяет требованиям forward_range (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает последний элемент производного представления; предоставляется только если оно удовлетворяет требованиям bidirectional_range и common_range (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает n-й элемент производного представления; предоставляется только если оно удовлетворяет требованиям random_access_range (открытая функция-член std::ranges::view_interface<D>) |
|
Руководства по выводу типов
Вложенные классы
| тип итератора (класс-член, используемый только для описания*) |
|
тип значения-сторожа, используемый, если iota_view является ограниченным диапазоном, а Bound и W имеют разные типы(класс-член, используемый только для описания*) |
Вспомогательные шаблоны
template< std::weakly_incrementable W, std::semiregular Bound > constexpr bool ranges::enable_borrowed_range<ranges::iota_view<W, Bound>> = true; | (начиная с C++20) |
Эта специализация ranges::enable_borrowed_range позволяет iota_view удовлетворять требованиям borrowed_range.
Возможная реализация
См. также реализацию в libstdc++.
| views::indices (3) |
|---|
namespace views {
inline constexpr auto indices = []</*is-integer-like*/ I>(I n)
{
return views::iota(I{}, n);
};
}
|
Примечания
| Макрос проверки поддержки | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_ranges_indices | 202506L | (C++26) |
ranges::views::indices |
Пример
#include <print>
#include <ranges>
struct Bound
{
int bound;
bool operator==(int x) const { return x == bound; }
};
int main()
{
std::print("{}\n", std::ranges::iota_view{1, 10});
std::print("{}\n", std::views::iota(1, 10));
std::print("{}\n", std::views::iota(1, Bound{10}));
std::print("{}\n", std::views::iota(1) | std::views::take(9));
constexpr int v[]{9, 8, 7, 6, 5, 4, 3, 2, 1};
// auto broken_indices = views::iota(0, std::ranges::size(v));
// does not compile due to types (int VS size_t) mismatch
auto good_indices = std::views::indices(std::ranges::size(v));
std::print("{}\n", good_indices);
}
Вывод:
[1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8]
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 4096 | C++20 |
views::iota мог копировать iota_view без изменений | запрещено |
| P2325R3 | C++20 |
iota_view требовал, чтобы W удовлетворял требованиям semiregularпоскольку view требовал default_initializable | требует только, чтобы W удовлетворял требованиям copyable |
Ссылки
- Стандарт C++26 (ISO/IEC 14882:2026):
- 25.6.4 Представление iota [range.iota]
- Стандарт C++23 (ISO/IEC 14882:2024):
- 26.6.4 Представление iota [range.iota]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 24.6.4 Представление iota [range.iota]
См. также
|
(C++11) | заполняет диапазон последовательными приращениями начального значения (шаблон функции и функциональный объект-алгоритм) |
|
(C++23) | |
|
(C++23) | заполняет диапазон последовательными приращениями начального значения (функциональный объект-алгоритм) |
|
(C++23) | view, состоящее из сгенерированной последовательности, в которой многократно выдаётся одно и то же значение(шаблон класса) (объект-точка настройки) |
|
(C++23) | view, сопоставляющее каждому элементу адаптированной последовательности кортеж из позиции элемента и его значения(шаблон класса) (объект-адаптер диапазона) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/iota_view