std::deque<T,Allocator>::insert
iterator insert( const_iterator pos, const T& value ); |
(1) | |
iterator insert( const_iterator pos, T&& value ); |
(2) | (seit C++11) |
iterator insert( const_iterator pos, size_type count, const T& value ); |
(3) | |
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); |
(4) | |
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); |
(5) | (seit C++11) |
Fügt Elemente an der angegebenen Position in den Container ein.
[first, last) vor pos ein.|
Diese Überladung hat denselben Effekt wie Überladung (3), wenn |
(bis C++11) |
|
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn |
(seit C++11) |
Alle Iteratoren (einschließlich des end()-Iterators) werden ungültig. Referenzen werden ebenfalls ungültig, es sei denn, pos == begin() oder pos == end(), in diesem Fall werden sie nicht ungültig.
Inhalt |
[editieren] Parameter
| pos | - | Iterator, vor dem der Inhalt eingefügt werden soll (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 einzufügenden Elementbereich definiert (cannot be iterators into container for which insert is called) |
| ilist | - | std::initializer_list, aus dem die Werte eingefügt werden sollen |
| Typanforderungen | ||
-T muss die Anforderungen von CopyAssignable und CopyInsertable erfüllen, um Überladung (1) verwenden zu können. | ||
-T muss die Anforderungen von MoveAssignable und MoveInsertable erfüllen, um Überladung (2) verwenden zu können. | ||
-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. | ||
-T muss die Anforderungen von Swappable, MoveAssignable, MoveConstructible und MoveInsertable erfüllen, um die Überladungen (4,5) verwenden zu können. (seit C++17) | ||
[editieren] Rückgabewert
[editieren] Komplexität
[editieren] Ausnahmen
Wenn eine Ausnahme geworfen wird, außer durch
- den Kopierkonstruktor von
T,
|
(seit C++11) |
- den Kopierzuweisungsoperator von
T,
|
(seit C++11) |
hat diese Funktion keine Auswirkung (starke Ausnahmegarantie).
|
Wenn beim Einfügen eines einzelnen Elements an einem der Enden eine Ausnahme geworfen wird, hat diese Funktion keine Auswirkung (starke Ausnahmegarantie). Andernfalls, wenn eine Ausnahme durch den Verschiebekonstruktor eines nicht CopyInsertable |
(seit C++11) |
Beispiel
#include <iostream> #include <iterator> #include <string_view> #include <deque> namespace stq { void println(std::string_view rem, const std::deque<int>& container) { std::cout << rem.substr(0, rem.size() - 2) << '['; bool first{true}; for (const int x : container) std::cout << (first ? first = false, "" : ", ") << x; std::cout << "]\n"; } } int main() { std::deque<int> c1(3, 100); stq::println("1. {}", c1); auto pos = c1.begin(); pos = c1.insert(pos, 200); // overload (1) stq::println("2. {}", c1); c1.insert(pos, 2, 300); // overload (3) stq::println("3. {}", c1); // reset pos to the begin: pos = c1.begin(); std::deque<int> c2(2, 400); c1.insert(std::next(pos, 2), c2.begin(), c2.end()); // overload (4) stq::println("4. {}", c1); int arr[] = {501, 502, 503}; c1.insert(c1.begin(), arr, arr + std::size(arr)); // overload (4) stq::println("5. {}", c1); c1.insert(c1.end(), {601, 602, 603}); // overload (5) stq::println("6. {}", c1); }
Ausgabe
1. [100, 100, 100] 2. [200, 100, 100, 100] 3. [300, 300, 200, 100, 100, 100] 4. [300, 300, 400, 400, 200, 100, 100, 100] 5. [501, 502, 503, 300, 300, 400, 400, 200, 100, 100, 100] 6. [501, 502, 503, 300, 300, 400, 400, 200, 100, 100, 100, 601, 602, 603]
[editieren] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 149 | C++98 | Überladungen (3) und (4) gaben nichts zurück | Gibt einen Iterator zurück. |
| LWG 247 | C++98 | die Komplexität war nur spezifiziert für das Einfügen eines einzelnen Elements |
auch für das Einfügen spezifiziert mehrerer Elemente |
[editieren] Siehe auch
| (C++11) |
konstruiert Elemente direkt (in-place) (public member function) |
| fügt ein Element am Anfang ein (public member function) | |
| fügt ein Element am Ende hinzu (public member function) | |
| erstellt einen std::insert_iterator vom Typ, der aus dem Argument abgeleitet wird (Funktionsvorlage) |