Espacios de nombres
Variantes
Acciones

std::ranges::iota, std::ranges::iota_result

De cppreference.com
< cpp‎ | algorithm‎ | ranges
 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones de secuencia no modificantes
(C++11)(C++11)(C++11)
(C++17)
Operaciones de secuencia modificantes
Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones mínimo/máximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
Algoritmos restringidos
Operaciones de secuencia no modificantes
Operaciones de secuencia modificantes
Operaciones en almacenamiento sin inicializar
Operaciones de partición
Operaciones de ordenamiento
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de montículo/montón
Operaciones de mínimo/máximo
Permutaciones
 
Definido en el archivo de encabezado <numeric>
Signatura de la llamada
template<std::input_or_output_iterator O, std::sentinel_for<O> S,

          std::weakly_incrementable T >
requires std::indirectly_writable<O, const T&>

constexpr iota_result<O, T> iota( O first, S last, T value );
(1) (desde C++23)
template<std::weakly_incrementable T, ranges::output_range<const T&> R >
constexpr iota_result<ranges::borrowed_iterator_t<R>, T> iota( R&& r, T value );
(2) (desde C++23)
Tipos auxiliares
template<class O, class T >
  using iota_result =ranges::out_value_result<O, T>;
(3) (desde C++23)

Llena el rango [first, last) con valores secuencialmente crecientes, comenzando con value y evaluando repetitivamente ++value.

Operación equivalente:

*(first)= value;*(first+1)=++value;*(first+2)=++value;*(first+3)=++value; ...

Contenido

[editar]Parámetros

first, last - El rango de elementos a llenar con valores secuencialmente crecientes comenzando con value.
value - Valor inicial a almacenar; la expresión ++value debe estar bien formada.

[editar]Valor de retorno

{last, value +ranges::distance(first, last)}

[editar]Complejidad

Exactamente last - first incrementos y asignaciones.

[editar]Posible implementación

struct iota_fn {template<std::input_or_output_iterator O, std::sentinel_for<O> S, std::weakly_incrementable T > requires std::indirectly_writable<O, const T&>constexpr iota_result<O, T> operator()(O first, S last, T value)const{while(first != last){*first = as_const(value);++first;++value;}return{std::move(first), std::move(value)};}   template<std::weakly_incrementable T, std::ranges::output_range<const T&> R >constexpr iota_result<std::ranges::borrowed_iterator_t<R>, T> operator()(R&& r, T value)const{return(*this)(std::ranges::begin(r), std::ranges::end(r), std::move(value));}};   inlineconstexpr iota_fn iota;

[editar]Notas

La función lleva el nombre de la función entera del lenguaje de programación APL.


Macro de Prueba de característica
__cpp_lib_ranges_iota

[editar]Ejemplo

El siguiente ejemplo aplica ranges::shuffle a un vector de iteradores de std::list, ya que ranges::shuffle no se puede aplicar directamente a std::list. ranges::iota se usa para llenar ambos contenedores.

#include <algorithm>#include <iostream>#include <list>#include <numeric>#include <random>#include <vector>   int main(){std::list<int> l(10); std::ranges::iota(l.begin(), l.end(), -4);   std::vector<std::list<int>::iterator> v(l.size()); std::ranges::iota(v, l.begin());   std::ranges::shuffle(v, std::mt19937{std::random_device{}()});   std::cout<<"Contenido de la lista: ";for(auto n: l)std::cout<< n <<' ';std::cout<<'\n';   std::cout<<"Contenido de la lista, barajada: ";for(auto i: v)std::cout<<*i <<' ';std::cout<<'\n';}

Posible salida:

Contenido de la lista: -4 -3 -2 -1 0 1 2 3 4 5 Contenido de la lista, barajada: 0 -1 3 4 -4 1 -2 -3 2 5

[editar]Véase también

Asigna por copia el valor dado a todos los elementos de un rango.
(plantilla de función)[editar]
Asigna un cierto valor a un rango de elementos.
(niebloid)[editar]
Asigna el resultado de las llamadas sucesivas de una función a todos los elementos de un rango.
(plantilla de función)[editar]
Guarda el resultado de una función en un rango.
(niebloid)[editar]
Una vista (view) que consiste en una secuencia generada al incrementar repetidamente un valor inicial.
(plantilla de clase)(objeto punto de personalización)[editar]
(C++11)
Llena un rango con incrementos sucesivos del mismo valor de partida
(plantilla de función)[editar]
close