Espacios de nombres
Variantes
Acciones

std::ranges::fill

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
(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
 
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 <algorithm>
Signatura de la llamada
template< class T, std::output_iterator<const T&> O, std::sentinel_for<O> S >

constexpr O

    fill( O first, S last, const T& value );
(1) (desde C++20)
template< class T, ranges::output_range<const T&> R >

constexpr ranges::borrowed_iterator_t<R>

    fill( R&& r, const T& value );
(2) (desde C++20)
1) Asigna el valor value dado a los elementos en el rango [firstlast).
2) Igual que (1), pero usa r como el rango fuente, como si usara ranges::begin(r) como first y ranges::end(r) como last.

Las entidades similares a funciones descritas en esta página son niebloids, es decir:

En la práctica, pueden implementarse como objetos función o con extensiones de compilador especiales.

Contenido

[editar] Parámetros

first, last - El rango de los elementos a modificar.
r - El rango de los elementos a modificar.
value - El valor a asignar.

[editar] Valor de retorno

Un iterador de salida que se compara igual que last.

[editar] Complejidad

Exactamente last - first asignaciones.

[editar] Posible implementación

struct fill_fn
{
    template<class T, std::output_iterator<const T&> O, std::sentinel_for<O> S>
    constexpr O operator()(O first, S last, const T& value) const
    {
        while (first != last)
            *first++ = value;
 
        return first;
    }
 
    template<class T, ranges::output_range<const T&> R>
    constexpr ranges::borrowed_iterator_t<R> operator()(R&& r, const T& value) const
    {
        return (*this)(ranges::begin(r), ranges::end(r), value);
    }
};
 
inline constexpr fill_fn fill;

[editar] Ejemplo

El siguiente código usa ranges::fill para establecer todos los elementos de std::vector<int> primero en -1, luego en 10.

#include <algorithm>
#include <iostream>
#include <vector>
 
void println(std::vector<int> const& vi)
{
    for (int e : vi)
        std::cout << e << ' ';
    std::cout << '\n';
}
 
int main()
{
    std::vector<int> v {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 
    std::ranges::fill(v.begin(), v.end(), -1);
    println(v);
 
    std::ranges::fill(v, 10);
    println(v);
}

Salida:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
10 10 10 10 10 10 10 10 10 10

[editar] Véase también

Asigna un valor a un número de elementos.
(niebloid) [editar]
Copia un rango de elementos a una nueva ubicación.
(niebloid) [editar]
Guarda el resultado de una función en un rango.
(niebloid) [editar]
Aplica una función a un rango de elementos.
(niebloid) [editar]
Asigna por copia el valor dado a todos los elementos de un rango.
(plantilla de función) [editar]