std::iota
De cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| Definido en el archivo de encabezado <numeric>
|
||
template< class ForwardIt, class T > void iota( ForwardIt first, ForwardIt last, T value ); |
(desde C++11) (hasta C++20) |
|
template< class ForwardIt, class T > constexpr void iota( ForwardIt first, ForwardIt last, T value ); |
(desde C++20) | |
Rellena el rango [first, last) con valores crecientes de forma secuencial, comenzando con value y repetitivamente evaluando ++value.
Operación equivalente:
*(d_first) = value;
*(d_first+1) = ++value;
*(d_first+2) = ++value;
*(d_first+3) = ++value;
...
Parámetros
| first, last | - | El rango de elementos con valores crecientes de forma secuencial, comenzando con value.
|
| value | - | Valor inicial a almacenar, la expresión ++value debe estar bien formada.
|
Valor de retorno
(Ninguno)
Complejidad
Exactamente last - first incrementos y asignaciones.
Posible implementación
template<class ForwardIt, class T>
constexpr // since C++20
void iota(ForwardIt first, ForwardIt last, T value)
{
while(first != last) {
*first++ = value;
++value;
}
}
|
Notas
La función se ha nombrado como tal por la función ⍳ del lenguaje de programación APL. Fue uno de los primeros componentes de la STL que no se incluyeron en C++98, pero eventualmente lo fue en la biblioteca estándar en C++11.
Ejemplo
El siguiente ejemplo aplica std::shuffle a un vector de iteradores de std::list ya que std::shuffle no puede aplicarse a una std::list directamente. std::iota se usa para poblar ambos contenedores.
Ejecuta este código
#include <algorithm>
#include <iostream>
#include <list>
#include <numeric>
#include <random>
#include <vector>
int main()
{
std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
std::vector<std::list<int>::iterator> v(l.size());
std::iota(v.begin(), v.end(), l.begin());
std::shuffle(v.begin(), v.end(), 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
Véase también
| Asigna por copia el valor dado a todos los elementos de un rango. (plantilla de función) | |
| Asigna el resultado de las llamadas sucesivas de una función a todos los elementos de un rango. (plantilla de función) |