Namespaces
Variants

std::ranges:: views:: iota, std::ranges:: iota_view

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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)
Сигнатура вызова
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)
1) Фабрика диапазонов, генерирующая последовательность элементов путём повторного инкремента начального значения. Может быть как ограниченной, так и неограниченной (бесконечной).
2) views :: iota ( e ) и views :: iota ( e, f ) являются эквивалентными выражениями для iota_view < std:: decay_t < decltype ( ( e ) ) >> ( e ) и iota_view ( e, f ) соответственно для любых подходящих подвыражений e и f .

Содержание

Объекты точек кастомизации

Имя views::iota обозначает объект точки кастомизации , который является константным функциональным объектом типа литерального semiregular класса. Для подробностей см. CustomizationPointObject .

Члены данных

Участник Определение
W value_ начальное значение
( объект-член только для демонстрации* )
Bound bound_ граничное значение, может быть недостижимым
( объект-член только для демонстрации* )

Функции-члены

создает iota_view
(публичная функция-член)
получает начальный итератор iota_view
(публичная функция-член)
получает страж, обозначающий конец iota_view
(публичная функция-член)
проверяет, является ли iota_view пустым (т.е. итератор и страж равны)
(публичная функция-член)
(optional)
получает размер iota_view (предоставляется только если он ограничен)
(публичная функция-член)
Наследуется от std::ranges::view_interface
(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 .

Пример

#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';
}

Вывод:

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++11)
заполняет диапазон последовательными приращениями начального значения
(шаблон функции)
заполняет диапазон последовательными приращениями начального значения
(функциональный объект алгоритма)
view состоящий из сгенерированной последовательности путем повторного создания одного и того же значения
(шаблон класса) (объект точки настройки)
view который отображает каждый элемент адаптированной последовательности в кортеж, содержащий как позицию элемента, так и его значение
(шаблон класса) (объект адаптера диапазона)