Namespaces
Variants

std::inplace_vector<T,N>:: assign

From cppreference.net

constexpr void assign ( size_type count, const T & value ) ;
(1) (depuis C++26)
template < class InputIt >
constexpr void assign ( InputIt first, InputIt last ) ;
(2) (depuis C++26)
constexpr void assign ( std:: initializer_list < T > ilist ) ;
(3) (depuis C++26)

Remplace le contenu du conteneur.

1) Remplace le contenu par count copies de la valeur value .
2) Remplace le contenu par des copies de ceux dans l'intervalle [ first , last ) .
Cette surcharge participe à la résolution de surcharge uniquement si InputIt satisfait aux exigences de LegacyInputIterator .
Si first ou last est un itérateur pointant vers * this , le comportement est indéfini.
3) Remplace le contenu par les éléments de ilist .

Table des matières

Paramètres

count - la nouvelle taille du conteneur
value - la valeur pour initialiser les éléments du conteneur
first, last - la paire d'itérateurs définissant la plage source des éléments à copier
ilist - std::initializer_list depuis laquelle copier les valeurs

Complexité

1) Linéaire en count .
2) Linéaire en fonction de la distance entre first et last .
3) Linéaire en ilist. size ( ) .

Exceptions

1) std::bad_alloc , si count > capacity ( ) .
2) std::bad_alloc , si ranges:: distance ( first, last ) > capacity ( ) .
3) std::bad_alloc , si ilist. size ( ) > capacity ( ) .
1-3) Toute exception levée par l'initialisation des éléments insérés.

Exemple

Le code suivant utilise assign pour ajouter plusieurs caractères à un std:: inplace_vector < char , 5 > :

#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
int main()
{
    std::inplace_vector<char, 5> chars;
    chars.assign(4, 'a'); // surcharge (1)
    std::println("{}", chars);
    const char extra[3]{'a', 'b', 'c'};
    chars.assign(std::cbegin(extra), std::cend(extra)); // surcharge (2)
    std::println("{}", chars);
    chars.assign({'C', '+', '+', '2', '6'}); // surcharge (3)
    std::println("{}", chars);
    try
    {
        chars.assign(8, 'x'); // lève une exception : count > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #1"); }
    try
    {
        const char bad[8]{'?'}; // ranges::distance(bad) > chars.capacity()
        chars.assign(std::cbegin(bad), std::cend(bad)); // lève une exception
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
    try
    {
        const auto l = {'1', '2', '3', '4', '5', '6'};
        chars.assign(l); // lève une exception : l.size() > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #3"); }
}

Sortie :

['a', 'a', 'a', 'a']
['a', 'b', 'c']
['C', '+', '+', '2', '6']
std::bad_alloc #1
std::bad_alloc #2
std::bad_alloc #3

Voir aussi

assigne une plage de valeurs au conteneur
(fonction membre publique)
assigne des valeurs au conteneur
(fonction membre publique)