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 |
Sí |
Rango común | Solo si Bound es el mismo tipo que W |
Intervalo prestado | Sí |
Miembros
Funciones miembro | Descripción |
---|---|
Constructores C++20 | Construya la vista. |
begin C++20 |
Obtenga un iterador al primer elemento. |
end C++20 |
Obtenga el sentinel al final de la vista. |
size C++20 |
Obtiene el número de elementos. |
Heredado de view_interface |
Descripción |
back C++20 |
Obtenga el último elemento. |
empty C++20 |
Compruebe si la vista está vacía. |
front C++20 |
Obtiene el primer elemento. |
operator[] C++20 |
Obtiene el elemento que se encuentra en la posición especificada. |
operator bool C++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 W
de plantilla inicializado predeterminado .
2) Cree un iota_view
con el valor inicial y el valor final especificados determinado por el tipo W
inicializado 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