Namespaces
Variants

std::ranges::fill

De fr.cppreference.net
 
 
Bibliothèque des algorithmes
Algorithmes contraints et algorithmes sur les plages (C++20)
Algorithmes contraints, par 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)

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

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 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, std::sentinel_for<O> S >
constexpr O fill( O first, S last, const T& value );
(1) (depuis C++20)
(jusqu'à C++26)
template< class O, std::sentinel_for<O> S, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill( O first, S last, const T& value );
(depuis C++26)
template< class T, ranges::output_range<const T&> R >
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );
(2) (depuis C++20)
(jusqu'à C++26)
template< class R, class T = ranges::range_value_t<R> >
requires ranges::output_range<R, const T&>
constexpr ranges::borrowed_iterator_t<R> fill( R&& r, const T& value );
(depuis C++26)
1) Assigne la valeur value aux éléments dans la plage [firstlast).
2) Idem que (1), mais utilise r comme plage source, comme si on utilisait ranges::begin(r) comme first et ranges::end(r) comme last.

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

Paramètres

first, last - la paire itérateur-sentinelle définissant la plage d'éléments à modifier
r - la plage d'éléments à modifier
value - la valeur à assigner

Valeur de retour

Un itérateur de sortie qui est égal à last.

Complexité

Exactement last - first assignations.

Implémentation possible

struct fill_fn
{
    template<class O, std::sentinel_for<O> S, class T = std::iter_value_t<O>>
    requires std::output_iterator<O, const T&>
    constexpr O operator()(O first, S last, const T& value) const
    {
        while (first != last)
            *first++ = value;
        
        return first;
    }

    template<class R, class T = ranges::range_value_t<R>>
    requires ranges::output_range<R, const T&>
    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;

Notes

Macro de test de fonctionnalité Valeur Norme Fonctionnalité
__cpp_lib_algorithm_default_value_type 202403 (C++26) Initialisation par liste pour les algorithmes (1,2)

Exemple

#include <algorithm>
#include <complex>
#include <iostream>
#include <vector>

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

int main()
{
    std::vector<int> v{0, 1, 2, 3, 4, 5};

    // set all elements to -1 using overload (1)
    std::ranges::fill(v.begin(), v.end(), -1);
    println(v);

    // set all element to 10 using overload (2)
    std::ranges::fill(v, 10);
    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(nums, {4, 2}); // T gets deduced
    #else
        std::ranges::fill(nums, std::complex<double>{4, 2});
    #endif
    println(nums);
}

Sortie :

-1 -1 -1 -1 -1 -1
10 10 10 10 10 10
(1,3) (2,2) (4,8)
(4,2) (4,2) (4,2)

Voir aussi

assigne une valeur à un nombre d'éléments
(objet fonction algorithme)
copie une plage d'éléments vers un nouvel emplacement
(objet fonction algorithme)
enregistre le résultat d'une fonction dans une plage
(objet fonction algorithme)
applique une fonction à une plage d'éléments
(objet fonction algorithme)
remplit une plage avec des nombres aléatoires provenant d'un générateur de bits aléatoires uniforme
(objet fonction algorithme)
assigne par copie la valeur donnée à chaque élément d'une plage
(modèle de fonction)