Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
 
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 konstruiert, um das Element an der vom Container bereitgestellten Stelle "in-place" zu erstellen. Die Argumente args... werden als std::forward<Args>(args)... an den Konstruktor weitergeleitet.

Inhalt

[bearbeiten] 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.

[bearbeiten] Rückgabewert

Ein Iterator zu dem eingefügten Element.

[bearbeiten] Komplexität

Linear bezüglich des Abstands zwischen pos und end().

[bearbeiten] Ausnahmen

Wirft std::bad_alloc, wenn vor dem Aufruf size() = capacity() gilt. Die Funktion hat keine Auswirkungen (starke Ausnahme-Sicherheitsgarantie).

Jede Ausnahme, die bei der Initialisierung des eingefügten Elements oder bei einer LegacyInputIterator-Operation ausgelöst wird. Elemente in [0pos) werden nicht modifiziert.

[bearbeiten] 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); // throws: no space
    }
    catch(const std::bad_alloc& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Mögliche Ausgabe

std::bad_alloc

[bearbeiten] Siehe auch

fügt Elemente ein
(public member function) [edit]
konstruiert ein Element direkt (in-place) am Ende
(public member function) [edit]