Namespaces
Variants

std::ranges::fill_n

Depuis fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur les plages (ranges) (C++20)
Algorithmes contraints, p. ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modificatrices    
Opérations par lots
(C++17)
Opérations de recherche
Opérations de séquence modificatrices
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Tri et opérations connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur des plages partitionnées)
Opérations d'ensemble (sur des plages triées)
Opérations de fusion (sur des plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
Algorithmes contraints
Tous les noms de ce menu appartiennent à l'espace de noms std::ranges
Opérations de séquence non modificatrices
Opérations de séquence modificatrices
Opérations de partitionnement
Opérations de tri
Opérations de recherche binaire (sur des plages triées)
       
       
Opérations d'ensemble (sur des plages triées)
Opérations de tas
Opérations de minimum/maximum
       
       
Opérations de permutation
Opérations de pliage
Opérations sur le stockage non initialisé
Types de retour
 
Défini dans l'en-tête <algorithm>
Signature d'appel
template< class T, std::output_iterator<const T&> O >
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
(depuis C++20)
(jusqu'à C++26)
template< class O, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
(depuis C++26)

Assigne la valeur donnée value à tous les éléments de la plage [firstfirst + n).

Les entités de type fonction décrites sur cette page sont des objets de fonction algorithmiques (informellement appelés niebloids), c'est-à-dire :

Paramètres

first - le début de la plage d'éléments à modifier
n - nombre d'éléments à modifier
value - la valeur à assigner

Valeur de retour

Un itérateur de sortie qui compare égal à first + n.

Complexité

Exactement n assignations.

Implémentation possible

struct fill_n_fn
{
    template<class O, class T = std::iter_value_t<O>>
    requires std::output_iterator<O, const T&>
    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 {};

Notes

Macro de test de fonctionnalitéValeur Std Fonctionnalité (C++26)
__cpp_lib_algorithm_default_value_type 202403 Liste d'initialisation pour les algorithmes Exemple

Exécuter ce code

#include <algorithm>
#include <complex>
#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{8};
    
    std::vector<std::string> v(n, "▓▓░░");
    println(v);
    
    std::ranges::fill_n(v.begin(), n, "░░▓▓");
    println(v);

    std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}};
    println(nums);
    #ifdef __cpp_lib_algorithm_default_value_type
        std::ranges::fill_n(nums.begin(), 2, {4, 2});
    #else
        std::ranges::fill_n(nums.begin(), 2, std::complex<double>{4, 2});
    #endif
    println(nums);
}

Voir aussi

 ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░
 ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓
 (1,3) (2,2) (4,8)
 (4,2) (4,2) (4,8)

ranges::fill

assigne une certaine valeur à une plage d'éléments
(objet de fonction algorithmique)
ranges::copy_n
copie un nombre d'éléments vers un nouvel emplacement
(objet de fonction algorithmique)
ranges::generate
enregistre le résultat d'une fonction dans une plage
(objet de fonction algorithmique)
ranges::transform
applique une fonction à une plage d'éléments
(objet de fonction algorithmique)
ranges::generate_random
remplit une plage avec des nombres aléatoires provenant d'un générateur de bits aléatoires uniforme
(objet de fonction algorithmique)
fill_n
(modèle de fonction)