std::inplace_vector<T,N>::insert
Von cppreference.com
< cpp | container | inplace vector
| constexpr iterator insert( const_iterator pos, const T& value ); |
(1) | (seit C++26) |
| constexpr iterator insert( const_iterator pos, T&& value ); |
(2) | (seit C++26) |
| constexpr iterator insert( const_iterator pos, size_type count, const T& value ); |
(3) | (seit C++26) |
| template< class InputIt > constexpr iterator insert( const_iterator pos, InputIt first, InputIt last ); |
(4) | (seit C++26) |
| constexpr iterator insert( const_iterator pos, std::initializer_list<T> ilist ); |
(5) | (seit C++26) |
Fügt Elemente an der angegebenen Position in den Container ein.
1) Fügt eine Kopie von value vor pos ein.
2) Fügt value vor pos ein, möglicherweise unter Verwendung von Move-Semantik.
3) Fügt count Kopien von value vor pos ein.
4) Fügt Elemente aus dem Bereich
[first, last) vor pos ein. Diese Überladung nimmt nur an der Überladungsauswahl teil, wenn InputIt ein LegacyInputIterator ist (um Mehrdeutigkeiten mit der Überladung (3) zu vermeiden). Jede Iterator in
[first, last) wird einmal dereferenziert. Wenn first und last Iteratoren in *this sind, ist das Verhalten undefiniert.
5) Fügt Elemente aus der Initialisierungsliste ilist vor pos ein. Äquivalent zu: insert(pos, ilist.begin(), ilist.end());.
| Dieser Abschnitt ist unvollständig |
Inhalt |
[bearbeiten] Parameter
| pos | - | Iterator, vor dem der Inhalt eingefügt wird (pos kann der end()-Iterator sein) |
| value | - | Elementwert, der eingefügt werden soll |
| zählt | - | Anzahl der einzufügenden Elemente |
| first, last | - | das Iteratorenpaar, das den Quell- Bereich der einzufügenden Elemente definiert |
| ilist | - | std::initializer_list, aus dem die Werte eingefügt werden sollen |
| Typanforderungen | ||
-T muss die Anforderungen von CopyInsertable erfüllen, um Überladung (1) zu verwenden. | ||
-T muss die Anforderungen von MoveInsertable erfüllen, um Überladung (2) zu verwenden. | ||
-T muss die Anforderungen von CopyAssignable und CopyInsertable erfüllen, um Überladung (3) zu verwenden. | ||
-T muss die Anforderungen von EmplaceConstructible erfüllen, um die Überladungen (4,5) zu verwenden. | ||
[bearbeiten] Rückgabewert
1,2) Iterator, der auf den eingefügten value zeigt.
3) Iterator, der auf das erste eingefügte Element zeigt, oder pos, wenn count == 0.
4) Iterator, der auf das erste eingefügte Element zeigt, oder pos, wenn first == last.
5) Iterator, der auf das erste eingefügte Element zeigt, oder pos, wenn ilist leer ist.
[bearbeiten] Komplexität
Linear in der Anzahl der eingefügten Elemente plus der Distanz zwischen pos und end() des Containers.
[bearbeiten] Ausnahmen
- Wirft std::bad_alloc, wenn vor dem Aufruf size() == capacity() ist. Die Funktion hat keine Effekte (starke Ausnahmensicherheitsgarantie).
- Jede Ausnahme, die bei der Initialisierung des eingefügten Elements oder durch eine LegacyInputIterator-Operation geworfen wird. Elemente in
[0,pos)werden nicht modifiziert.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <initializer_list> #include <inplace_vector> #include <iterator> #include <new> #include <print> int main() { std::inplace_vector<int, 14> v(3, 100); std::println("1. {}", v); auto pos = v.begin(); pos = v.insert(pos, 200); // overload (1) std::println("2. {}", v); v.insert(pos, 2, 300); // overload (3) std::println("3. {}", v); int arr[] = {501, 502, 503}; v.insert(v.begin(), arr, arr + std::size(arr)); // overload (4) std::println("4. {}", v); v.insert(v.end(), {601, 602, 603}); // overload (5) std::println("5. {}", v); const auto list = {-13, -12, -11}; try { v.insert(v.begin(), list); // throws: no space } catch(const std::bad_alloc&) { std::println("bad_alloc: v.capacity()={} < v.size()={} + list.size()={}", v.capacity(), v.size(), list.size()); } }
Ausgabe
1. [100, 100, 100] 2. [200, 100, 100, 100] 3. [300, 300, 200, 100, 100, 100] 4. [501, 502, 503, 300, 300, 200, 100, 100, 100] 5. [501, 502, 503, 300, 300, 200, 100, 100, 100, 601, 602, 603] bad_alloc: v.capacity()=14 < v.size()=12 + list.size()=3
[bearbeiten] Siehe auch
| konstruiert Elemente direkt (in-place) (public member function) | |
| fügt einen Bereich von Elementen ein (public member function) |