Namespaces
Variants

std::iota

Desde es.cppreference.net
 
 
Biblioteca de algoritmos
Algoritmos restringidos y algoritmos sobre rangos (C++20)
Algoritmos restringidos, ej. ranges::copy, ranges::sort, ...
Operaciones de secuencia no modificadoras    
Operaciones por lotes
(C++17)
Operaciones de búsqueda
Operaciones de secuencia modificadoras
Operaciones de copia
(C++11)
(C++11)
Operaciones de intercambio
Operaciones de transformación
Operaciones de generación
Operaciones de eliminación
Operaciones de cambio de orden
(hasta C++17)(C++11)
(C++20)(C++20)
Operaciones de muestreo
(C++17)

Ordenación y operaciones relacionadas
Operaciones de particionado
(C++11)    

Operaciones de ordenación
Operaciones de búsqueda binaria
(en rangos particionados)
Operaciones de conjunto (en rangos ordenados)
Operaciones de fusión (en rangos ordenados)
Operaciones de montículo
Operaciones de mínimo/máximo
(C++11)
(C++17)
Operaciones de comparación lexicográfica
Operaciones de permutación


 
 
Definido en el encabezado <numeric>
template< class ForwardIt, class T >
void iota( ForwardIt first, ForwardIt last, T value );
(desde C++11)
(constexpr desde C++20)

Llena el rango [first, last) con valores que aumentan secuencialmente, comenzando con value y evaluando repetidamente ++value.

Operación equivalente (asumiendo que ++value devuelve el valor incrementado):

*first   = value;
*++first = ++value;
*++first = ++value;
*++first = ++value;
// repeats until “last” is reached

Si alguna de las siguientes condiciones se cumple, el programa está mal formado:

  • T no es convertible al tipo de valor de ForwardIt.
  • La expresión ++val está mal formada, donde val es una variable de tipo T.

Parámetros

first, last - el par de iteradores que definen el rango de elementos a llenar con valores que aumentan secuencialmente comenzando con value
value - valor inicial a almacenar

Complejidad

Exactamente std::distance(first, last) incrementos y asignaciones.

Posible implementación

template<class ForwardIt, class T>
constexpr // since C++20
void iota(ForwardIt first, ForwardIt last, T value)
{
    for (; first != last; ++first, ++value)
        *first = value;
}

Notas

La función lleva el nombre de la función entera ⍳ del lenguaje de programación APL. Fue uno de los componentes STL que no se incluyeron en C++98, pero llegaron a la biblioteca estándar en C++11.

Ejemplo

El siguiente ejemplo aplica std::shuffle a un std::vector de iteradores de std::lists. std::iota se utiliza para llenar contenedores.

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <list>
#include <numeric>
#include <random>
#include <vector>

class BigData // inefficient to copy
{
    int data[1024]; /* some raw data */
public:
    explicit BigData(int i = 0) { data[0] = i; /* ... */ }
    operator int() const { return data[0]; }
    BigData& operator=(int i) { data[0] = i; return *this; }
    /* ... */
};

int main()
{
    std::list<BigData> l(10);
    std::iota(l.begin(), l.end(), -4);
    
    std::vector<std::list<BigData>::iterator> v(l.size());
    std::iota(v.begin(), v.end(), l.begin());
    // Vector of iterators (to original data) is used to avoid expensive copying,
    // and because std::shuffle (below) cannot be applied to a std::list directly.
    
    std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
    
    std::cout << "Original contents of the list l:\t";
    for (const auto& n : l)
        std::cout << std::setw(2) << n << ' ';
    std::cout << '\n';
    
    std::cout << "Contents of l, viewed via shuffled v:\t";
    for (const auto i : v)
        std::cout << std::setw(2) << *i << ' ';
    std::cout << '\n';
}

Posible salida:

Original contents of the list l:	-4 -3 -2 -1  0  1  2  3  4  5
Contents of l, viewed via shuffled v:	-1  5 -4  0  2  1  4 -2  3 -3

Véase también

llena un rango con incrementos sucesivos del valor inicial
(objeto función algoritmo)
asigna por copia el valor dado a cada elemento en un rango
(plantilla de función & objeto función algoritmo)
asigna un cierto valor a un rango de elementos
(objeto función algoritmo)
asigna los resultados de llamadas sucesivas a una función a cada elemento en un rango
(plantilla de función & objeto función algoritmo)
guarda el resultado de una función en un rango
(objeto función algoritmo)
una vista que consiste en una secuencia generada incrementando repetidamente un valor inicial
(plantilla de clase) (objeto punto de personalización)
una vista que genera una secuencia de valores crecientes desde 0 hasta n
(objeto punto de personalización)
una vista que asigna cada elemento de una secuencia adaptada a una tupla que contiene tanto la posición del elemento como su valor
(plantilla de clase) (objeto adaptador de rango)