Spec-Zone.ru › C++

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)
1) Фабрика диапазонов, генерирующая последовательность элементов путём многократного увеличения начального значения. Диапазон может быть ограниченным или неограниченным (бесконечным).
2) views::iota(e) и views::iota(e, f) эквивалентны по выражению соответственно iota_view<std::decay_t<decltype((e))>>(e) и iota_view(e, f) для любых подходящих подвыражений e и f.
3) Пусть T — это std::remove_cvref_t<decltype((e))>. Тогда views::indices(e) эквивалентно по выражению views::iota(T(0), e) для любого подходящего подвыражения e, если T является целочисленным типом.

Объекты-точки настройки

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

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

(начиная с C++26)

Члены-данные

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

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

(конструктор)
создаёт iota_view
(открытая функция-член)
begin
получает итератор начала iota_view
(открытая функция-член)
end
получает значение-сторож, обозначающее конец iota_view
(открытая функция-член)
empty
проверяет, пуст ли iota_view (то есть равны ли итератор и значение-сторож)
(открытая функция-член)
size
(необязательно)
получает размер iota_view (предоставляется только для ограниченного диапазона)
(открытая функция-член)
Унаследовано от std::ranges::view_interface
cbegin
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-член std::ranges::view_interface<D>)
cend
(C++23)
возвращает значение-сторож для константного итератора диапазона
(открытая функция-член std::ranges::view_interface<D>)
operator bool
возвращает, не является ли производное представление пустым; предоставляется только если к нему применимо ranges::empty
(открытая функция-член std::ranges::view_interface<D>)
front
возвращает первый элемент производного представления, если оно удовлетворяет требованиям forward_range
(открытая функция-член std::ranges::view_interface<D>)
back
возвращает последний элемент производного представления; предоставляется только если оно удовлетворяет требованиям bidirectional_range и common_range
(открытая функция-член std::ranges::view_interface<D>)
operator[]
возвращает n-й элемент производного представления; предоставляется только если оно удовлетворяет требованиям random_access_range
(открытая функция-член std::ranges::view_interface<D>)

Руководства по выводу типов

Вложенные классы

iterator
тип итератора
(класс-член, используемый только для описания*)
sentinel
тип значения-сторожа, используемый, если 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]

См. также

iota
(C++11)
заполняет диапазон последовательными приращениями начального значения
(шаблон функции и функциональный объект-алгоритм)
ranges::iota
(C++23)
ranges::iota
(C++23)
заполняет диапазон последовательными приращениями начального значения
(функциональный объект-алгоритм)
ranges::repeat_viewviews::repeat
(C++23)
view, состоящее из сгенерированной последовательности, в которой многократно выдаётся одно и то же значение
(шаблон класса) (объект-точка настройки)
ranges::enumerate_viewviews::enumerate
(C++23)
view, сопоставляющее каждому элементу адаптированной последовательности кортеж из позиции элемента и его значения
(шаблон класса) (объект-адаптер диапазона)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/iota_view

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API