Namensräume
Varianten
Aktionen

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

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

Ersetzt den Inhalt des Containers.

1) Ersetzt den Inhalt durch count Kopien von value value.
2) Ersetzt den Inhalt durch Kopien der Elemente im Bereich [firstlast).
Wenn eines der Argumente ein Iterator in *this ist, ist das Verhalten undefiniert. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn InputIt LegacyInputIterator erfüllt.
3) Ersetzt den Inhalt durch die Elemente aus ilist.

Inhalt

[bearbeiten] Parameter

zählt - die neue Größe des Containers
value - der Wert, mit dem die Elemente des Containers initialisiert werden sollen
first, last - das Iteratorpaar, das den Quell-Bereich der zu kopierenden Elemente definiert
ilist - std::initializer_list, aus dem die Werte kopiert werden sollen

[bearbeiten] Komplexität

1) Linear in count.
2) Linear in der Distanz zwischen first und last.
3) Linear in ilist.size().

Ausnahmen

1) std::bad_alloc, wenn count > capacity().
2) std::bad_alloc, wenn std::ranges::distance(first, last) > capacity).
3) std::bad_alloc, wenn ilist.size() > capacity).
1-3) Jede Ausnahme, die bei der Initialisierung von eingefügten Elementen ausgelöst wird.

[bearbeiten] Beispiel

Der folgende Code verwendet assign, um mehrere Zeichen zu einem std::inplace_vector<char, 5> hinzuzufügen

#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
 
int main()
{
    std::inplace_vector<char, 5> chars;
 
    chars.assign(4, 'a'); // overload (1)
    std::println("{}", chars);
 
    const char extra[3]{'a', 'b', 'c'};
    chars.assign(std::cbegin(extra), std::cend(extra)); // overload (2)
    std::println("{}", chars);
 
    chars.assign({'C', '+', '+', '2', '6'}); // overload (3)
    std::println("{}", chars);
 
    try
    {
        chars.assign(8, 'x'); // throws: 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)); // throws
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
 
    try
    {
        const auto l = {'1', '2', '3', '4', '5', '6'};
        chars.assign(l); // throws: l.size() > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #3"); }
}

Ausgabe

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

[bearbeiten] Siehe auch

weist dem Container einen Bereich von Werten zu
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]