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, если /*is-integer-like*/<T> является true.Объекты точек кастомизации
Имя
views::iota
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
типа
литерального
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Элементы данных
| Элемент | Описание |
W value_
|
начальное значение (объект-элемент, только для пояснения*) |
Bound bound_
|
сторожевое значение, может быть недостижимым (объект-элемент, только для пояснения*) |
Функции-члены
создает
iota_view
(публичная функция-член) |
|
получает начальный итератор
iota_view
(публичная функция-член) |
|
получает страж, обозначающий конец
iota_view
(публичная функция-член) |
|
проверяет, является ли
iota_view
пустым (т.е. итератор и страж равны)
(публичная функция-член) |
|
|
(optional)
|
получает размер
iota_view
(предоставляется только если он ограничен)
(публичная функция-член) |
Унаследовано от ranges::view_interface | |
(C++23) |
возвращает константный итератор на начало диапазона (public функция-элемент std::ranges::view_interface<D>)
|
(C++23) |
возвращает ограничитель для константного итератора диапазона (public функция-элемент std::ranges::view_interface<D>)
|
| возвращает, является ли производное представление непустым, только если к нему применимо ranges::empty (public функция-элемент std::ranges::view_interface<D>)
| |
| возвращает первый элемент в производном представлении, если оно удовлетворяет forward_range (public функция-элемент std::ranges::view_interface<D>)
| |
| возвращает последний элемент в производном представлении, только если оно удовлетворяет bidirectional_range и common_range (public функция-элемент std::ranges::view_interface<D>)
| |
возвращает n-й элемент в производном представлении, только если оно удовлетворяет random_access_range (public функция-элемент 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 <algorithm>
#include <iostream>
#include <ranges>
struct Bound
{
int bound;
bool operator==(int x) const { return x == bound; }
};
int main()
{
for (int i : std::ranges::iota_view{1, 10})
std::cout << i << ' ';
std::cout << '\n';
for (int i : std::views::iota(1, 10))
std::cout << i << ' ';
std::cout << '\n';
for (int i : std::views::iota(1, Bound{10}))
std::cout << i << ' ';
std::cout << '\n';
for (int i : std::views::iota(1) | std::views::take(9))
std::cout << i << ' ';
std::cout << '\n';
std::ranges::for_each(std::views::iota(1, 10),
[](int i){ std::cout << i << ' '; });
std::cout << '\n';
#if __cpp_lib_ranges_indices
constexpr int v[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
// 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));
for (auto i : good_indices)
std::cout << v[i] << ' ';
std::cout << '\n';
#endif
}
Вывод:
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
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 4096 | C++20 |
views::iota
could copy an
iota_view
as-is
|
forbidden |
| P2325R3 | C++20 |
iota_view
required that
W
is
semiregular
as
view
required
default_initializable
|
only requires that
W
is
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) |
заполняет диапазон последовательно возрастающими значениями, начиная с заданного (функциональный объект алгоритма) |
| представление, состоящее из сгенерированной путём многократного повторения одного и того же значения последовательности (шаблон класса) (объект точки настройки) | |
| представление, которое отображает каждый элемент адаптированной последовательности в кортеж, содержащий как позицию элемента, так и его значение (шаблон класса) (объект адаптера диапазона) |