Namespaces
Variants

std:: iota

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
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 secuencialmente crecientes, comenzando con value y evaluando repetidamente ++ value .

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

*first   = value;
*++first = ++value;
*++first = ++value;
*++first = ++value;
// se repite hasta que se alcanza "last"

Si se satisface cualquiera de las siguientes condiciones, 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 .

Contenidos

Parámetros

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

Complejidad

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

Implementación posible

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

Notas

La función recibe su 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 que llegaron a la biblioteca estándar en C++11.

Ejemplo

El siguiente ejemplo aplica std::shuffle a un vector de iteradores de std::list s. std::iota se utiliza para poblar los 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';
}

Salida posible:

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 de algoritmo)
asigna por copia el valor dado a cada elemento en un rango
(plantilla de función)
asigna un valor determinado a un rango de elementos
(objeto función de algoritmo)
asigna los resultados de llamadas sucesivas de función a cada elemento en un rango
(plantilla de función)
guarda el resultado de una función en un rango
(objeto función de algoritmo)
una view que consiste en una secuencia generada incrementando repetidamente un valor inicial
(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)