std::inplace_vector<T,N>::emplace
Von cppreference.com
< cpp | container | inplace vector
| 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.
| Dieser Abschnitt ist unvollständig |
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 [0, pos) werden nicht modifiziert.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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) | |
| konstruiert ein Element direkt (in-place) am Ende (public member function) |