Compartir a través de


iota_view (Clase, Biblioteca estándar de C++)

Genera una vista de una secuencia de elementos incrementando repetidamente un valor inicial. La secuencia se puede enlazar o desenlacar.

Sintaxis

template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
    requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;

Parámetros de plantilla

W
Tipo de los valores de la secuencia. El tipo especificado debe admitir operator++.

Bound
Tipo del valor final. Si Bound es std::unreachable_sentinel_t (el valor predeterminado), la vista no está delimitada.

Características de la vista

Para obtener una descripción de las siguientes entradas, vea View class characteristics (Ver características de clase).

Característica Descripción
Adaptador de rango views::iota
Intervalo subyacente No aplicable porque esta vista genera sus miembros
Tipo de elemento Igual que el parámetro de plantilla W
Ver categoría de iterador Admite input_range hasta random_access_range, dependiendo del tipo de . W
Tamaño Solo si el intervalo tiene un valor final, es decir, no es una serie infinita.
Es const-iterable
Rango común Solo si Bound es el mismo tipo que W
Intervalo prestado

Miembros

Funciones miembro Descripción
Constructores C++20 Construya la vista.
beginC++20 Obtenga un iterador al primer elemento.
endC++20 Obtenga el sentinel al final de la vista.
sizeC++20 Obtiene el número de elementos.
Heredado de view_interface Descripción
backC++20 Obtenga el último elemento.
emptyC++20 Compruebe si la vista está vacía.
frontC++20 Obtiene el primer elemento.
operator[]C++20 Obtiene el elemento que se encuentra en la posición especificada.
operator boolC++20 Compruebe si la vista no está vacía.

Comentarios

Una buena manera de crear un iota_view es mediante el adaptador de iota rango. Los adaptadores de rango son la manera prevista de crear clases de vista. Los tipos de vista se exponen en caso de que desee crear su propio tipo de vista personalizado.

La secuencia de valores puede ser valores enteros como 1,2,3 o "a", "b", "c" o elementos consecutivos de un intervalo.

Esta vista se usa normalmente para iterar en una serie de valores. Por ejemplo:

for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
    std::cout << i << ’ ’; // 1 2 3 4 5 6 7 8 9
}

Requisitos

Encabezado: <ranges> (desde C++20)

Espacio de nombres: std::ranges

Opción del compilador: /std:c++20 o posterior es necesaria.

Constructores

Cree una instancia de .iota_view

1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );

Parámetros

value
Valor inicial de la serie.

bound
Enlazado de la serie. Es uno mayor que el último valor de la serie.

Para obtener información sobre el tipo de parámetro de plantilla, consulte Parámetros de plantilla.

Comentarios

1) Cree un iota_view con un valor inicial y final determinado por el tipo Wde plantilla inicializado predeterminado .
2) Cree un iota_view con el valor inicial y el valor final especificados determinado por el tipo Winicializado de valor .
3) Cree un límite iota_view con el valor inicial y el valor final especificados. El valor final es uno menor que el último valor especificado.
4) Se usa para crear subvistas. Por ejemplo, std::ranges::iota_view(start, end); dónde start y end son iteradores al inicio y al final de la subvista.

En lugar de crear esta clase directamente, una manera fácil de crear iota_view es mediante el adaptador de iota rango. Los adaptadores de rango son la manera prevista de crear clases de vista. Los tipos de vista se exponen en caso de que desee crear su propio tipo de vista personalizado.

Si el tipo del enlazado es unreachable_sentinel_t, se enlaza la vista resultante.

Cuando se usa uno de los constructores que inicializa el valor enlazado, el enlazado será el valor inicializado predeterminado para ese tipo. Por ejemplo, iota_view<int, int>{} es un intervalo vacío de int , ya que el valor int construido predeterminado y enlazado son 0. Además, iota_view<int, int>{-4} se -4, -3, -2, -1 debe a que el límite construido int de forma predeterminada es 0.

iota_view ejemplo de constructor

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0 
    std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
    std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
    
    std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
    auto start = std::ranges::find(v, 35);
    auto end = std::ranges::find(v, 82);
    for (auto &&val : std::ranges::iota_view(start, end))
    {
        std::cout << *val << ' '; // outputs 35 45 50 66 77
    }
}

begin

Obtenga un iterador al primer elemento de la vista.

constexpr auto begin();
constexpr auto begin() const requires range<const V>;

Parámetros

Ninguno.

Valor devuelto

Iterador que apunta al primer elemento de la vista.

end

Obtenga el centinela final al final de la vista.

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

Parámetros

Ninguno.

Valor devuelto

Si no iota_view está enlazado, devuelve std::unreachable_sentinel.

iota_view Si está enlazado, devuelve un iterador que apunta al sentinel más allá del último valor de la secuencia.

size

Obtiene el número de elementos de la vista. iota_view debe estar enlazado.

constexpr auto size() requires
    (same_as<W, Bound> && advanceable <W>) ||
    (integral<W> && integral<Bound>) ||
    sized_sentinel_for<Bound, W>;

Parámetros

Ninguno.

Valor devuelto

Número de elementos incluidos en iota_view.

Comentarios

No se puede llamar size() a en un sin enlazar iota_view.

Consulte también

<ranges>
iota() adaptador de rango
std::numerics::iota
ver clases