Espacios de nombres
Variantes

std::fill_n

De cppreference.com
 
 
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
(C++11)
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
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
Definido en el archivo de encabezado <algorithm>
(1)
template< class OutputIt, class Size, class T > void fill_n( OutputIt first, Size count, const T& value );
(hasta C++11)
template< class OutputIt, class Size, class T > OutputIt fill_n( OutputIt first, Size count, const T& value );
(desde C++11)
(hasta C++20)
template< class OutputIt, class Size, class T > constexpr OutputIt fill_n( OutputIt first, Size count, const T& value );
(desde C++20)
template< class ExecutionPolicy, class ForwardIt, class Size, class T > ForwardIt fill_n( ExecutionPolicy&& policy, ForwardIt first, Size count, const T& value );
(2) (desde C++17)
1) Asigna el valor value dado a los primeros count elementos en el rango que comienza en first si count > 0. De lo contrario no hace nada.
2) Igual que (1), pero se ejecuta de acuerdo a la política de ejecución policy. Esta sobrecarga no participa en la resolución de sobrecarga a menos que std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> (hasta C++20) std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> (desde C++20) sea verdadera.

Parámetros

first - El comienzo del rango de los elementos a modificar.
count - El número de elementos a modificar.
value - El valor a asignar.
policy - La política de ejecución a usar. Véase política de ejecución para más detalles.
Requisitos de tipo
-
OutputIt debe satisfacer los requisitos de OutputIterator.
-
ForwardIt debe satisfacer los requisitos de ForwardIterator.
-
value debe ser escribible para first.
-
Size debe ser convertible a un tipo entero.

Valor de retorno

(Ninguno) (hasta C++11)
Un iterador más allá del último elemento asignado si count > 0, first de lo contrario. (desde C++11)

Complejidad

Exactamente std::max(0, count) asignaciones.

Excepciones

La sobrecarga con un parámetro de plantilla llamado ExecutionPolicy (política de ejecución) reporta errores tales que:

  • Si la ejecución de una función invocada como parte del algoritmo lanza una excepción y la política de ejecución es una de las tres políticas estándar, se llama a std::terminate. Para cualquier otra política de ejecución, el comportamiento está definido por la implementación.
  • Si el algoritmo falla al asignar memoria, se lanza std::bad_alloc.

Posible implementación

template<class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size count, const T& value)
{
    for (Size i = 0; i < count; i++)
        *first++ = value;
    return first;
}

Ejemplo

El siguiente código usa fill_n() para asignar -1 a la primera mitad de un vector de enteros:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> v1 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    std::fill_n(v1.begin(), 5, -1);
    
    std::copy(begin(v1), end(v1), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

Salida:

-1 -1 -1 -1 -1 5 6 7 8 9

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 283 C++98 Se requería que T fuera CopyAssignable, pero
T no siempre es escribible para OutputIt
En su lugar se requiere que sea escribible.
LWG 426 C++98 El requisito de complejidad era 'exactamente count
asignaciones', lo cual está roto si count es negativo.
No hay asignación si
count no es positivo.

Véase también

Asigna por copia el valor dado a todos los elementos de un rango.
(plantilla de función) [editar]
Asigna un valor a un número de elementos.
(niebloid) [editar]