Namespaces
Variants

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

From cppreference.net
template < class ... Args >
constexpr iterator emplace ( const_iterator position, Args && ... args ) ;
(seit C++26)

Fügt ein neues Element direkt vor pos in den Container ein. Typischerweise wird das Element mittels Placement- new direkt an der vom Container bereitgestellten Position konstruiert. Die Argumente args... werden an den Konstruktor als std:: forward < Args > ( args ) ... weitergeleitet.

Inhaltsverzeichnis

Parameter

pos - Iterator, vor dem das neue Element konstruiert wird
args - Argumente, die an den Konstruktor des Elements weitergeleitet werden
Typanforderungen
-
T muss die Anforderungen von MoveAssignable , MoveInsertable und EmplaceConstructible erfüllen.

Rückgabewert

Ein Iterator auf das eingefügte Element.

Komplexität

Linear in der Entfernung zwischen pos und end() .

Ausnahmen

Wirft std::bad_alloc falls vor dem Aufruf size ( ) == capacity ( ) . Die Funktion hat keine Auswirkungen ( starke Ausnahmesicherheitsgarantie ).

Jede Ausnahme, die durch die Initialisierung des eingefügten Elements oder durch einen LegacyInputIterator -Vorgang ausgelöst wird. Elemente im Bereich [ 0 , pos ) bleiben unverändert.

Beispiel

#include <cassert>
#include <inplace_vector>
#include <new>
#include <utility>
int main()
{
    using P = std::pair<int, int>;
    using I = std::inplace_vector<P, 3>;
    auto nums = I{{0, 1}, {2, 3}};
    auto it = nums.emplace(nums.begin() + 1, -1, -2);
    assert((*it == P{-1, -2}));
    assert((nums == I{P{0, 1}, {-1, -2}, {2, 3}}));
    try
    {
        nums.emplace(nums.begin(), 1, 3); // wirft Exception: kein Speicherplatz
    }
    catch(const std::bad_alloc& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Mögliche Ausgabe:

std::bad_alloc

Siehe auch

fügt Elemente ein
(öffentliche Elementfunktion)
erstellt ein Element direkt am Ende
(öffentliche Elementfunktion)