Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <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) (desde C++20)
namespace views {

inline constexpr /* no especificado */ iota = /* no especificado */ ;

}
(2) (desde C++20)
Firma de llamada
template < class W >

requires /* ver más abajo */

constexpr /* ver más abajo */ iota ( W && value ) ;
(desde C++20)
template < class W, class Bound >

requires /* ver más abajo */

constexpr /* ver más abajo */ iota ( W && value, Bound && bound ) ;
(desde C++20)
1) Una fábrica de rangos que genera una secuencia de elementos incrementando repetidamente un valor inicial. Puede ser acotada o no acotada (infinita).
2) views :: iota ( e ) y views :: iota ( e, f ) son equivalentes-expresión a iota_view < std:: decay_t < decltype ( ( e ) ) >> ( e ) y iota_view ( e, f ) respectivamente para cualesquiera subexpresiones adecuadas e y f .

Contenidos

Objetos de punto de personalización

El nombre views::iota denota un objeto de punto de personalización , que es un objeto función constante de un tipo de clase literal semiregular . Consulte CustomizationPointObject para más detalles.

Miembros de datos

Miembro Definición
W value_ el valor inicial
( objeto miembro solo para exposición* )
Bound bound_ el valor centinela, puede ser inalcanzable
( objeto miembro solo para exposición* )

Funciones miembro

crea un iota_view
(función miembro pública)
obtiene el iterador inicial de un iota_view
(función miembro pública)
obtiene el centinela que denota el final de un iota_view
(función miembro pública)
comprueba si el iota_view está vacío (es decir, si el iterador y el centinela son iguales)
(función miembro pública)
(opcional)
obtiene el tamaño de un iota_view (solo se proporciona si está acotado)
(función miembro pública)
Heredado de std::ranges::view_interface
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D> )
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D> )
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el n ésimo elemento en la vista derivada, proporcionado solo si satisface random_access_range
(función miembro pública de std::ranges::view_interface<D> )

Guías de deducción

Clases anidadas

el tipo de iterador
( clase miembro solo para exposición* )
el tipo de centinela utilizado cuando el iota_view está acotado y Bound y W no son del mismo tipo
( clase miembro solo para exposición* )

Plantillas auxiliares

template < std:: weakly_incrementable W, std:: semiregular Bound >
constexpr bool ranges:: enable_borrowed_range < ranges :: iota_view < W, Bound >> = true ;
(desde C++20)

Esta especialización de ranges:: enable_borrowed_range hace que iota_view satisfaga borrowed_range .

Ejemplo

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

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 4096 C++20 views::iota podría copiar un iota_view tal cual prohibido
P2325R3 C++20 iota_view requería que W fuera semiregular
como view requería default_initializable
solo requiere que W sea copyable

Véase también

(C++11)
llena un rango con incrementos sucesivos del valor inicial
(plantilla de función)
llena un rango con incrementos sucesivos del valor inicial
(objeto función de algoritmo)
una view que consiste en una secuencia generada produciendo repetidamente el mismo valor
(plantilla de clase) (objeto punto de personalización)
una view que mapea cada elemento de la secuencia adaptada a una tupla de tanto la posición del elemento como su valor
(plantilla de clase) (objeto adaptador de rango)