◐ Shell
clean mode source ↗

std::ranges::fill_n - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <algorithm>

Signatura de la llamada

template< class T, std::output_iterator<const T&> O > constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );

(desde C++20)

Asigna el valor value dado a todos los elementos en el rango [firstfirst + n).

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.

Parámetros

first - El comienzo del rango de los elementos a modificar.
n - El número de elementos a modificar.
value - El valor a asignar.

Valor de retorno

Un iterador de salida que se compara igual que first + n.

Complejidad

Exactamente n asignaciones.

Posible implementación

struct fill_n_fn
{
    template<class T, std::output_iterator<const T&> O>
    constexpr O operator()(O first, std::iter_difference_t<O> n, const T& value) const
    {
        for (std::iter_difference_t<O> i {}; i != n; ++first, ++i)
            *first = value;
        return first;
    }
};

inline constexpr fill_n_fn fill_n {};

Ejemplo

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

void println(const auto& v)
{
    for (const auto& elem : v)
        std::cout << ' ' << elem;
    std::cout << '\n';
}

int main()
{
    constexpr auto n {010};

    std::vector<std::string> v(n, "▓▓░░");
    println(v);

    std::ranges::fill_n(v.begin(), n, "░░▓▓");
    println(v);
}

Salida:

 ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░
 ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓

Véase también