std::vector<T,Allocator>::append_range
| template< container-compatible-range<T> R > constexpr void append_range( R&& rg ); |
(seit C++23) | |
Fügt Kopien von Elementen aus dem Bereich rg vor end() ein, in nicht-umgekehrter Reihenfolge.
Wenn nach der Operation die neue size() größer als die alte capacity() ist, findet eine Reallokation statt. In diesem Fall werden alle Iteratoren (einschließlich des end()-Iterators) und alle Referenzen auf die Elemente ungültig. Andernfalls wird nur der end()-Iterator ungültig.
Jeder Iterator in rg wird genau einmal dereferenziert.
Inhalt |
[bearbeiten] Parameter
| rg | - | Ein Container-kompatibler Bereich, d. h. ein input_range, dessen Elemente in T konvertierbar sind |
| Typanforderungen | ||
-T muss in vector aus *ranges::begin(rg) EmplaceConstructible sein. Ebenso muss T in vector MoveInsertable sein. Andernfalls ist das Verhalten undefiniert. | ||
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Komplexität
Wenn eine Reallokation stattfindet, linear in der Anzahl der Elemente des resultierenden vector; andernfalls linear in der Anzahl der eingefügten Elemente plus der Distanz zum end().
[bearbeiten] Ausnahmen
Wenn eine Ausnahme geworfen wird, die nicht vom Kopierkonstruktor, Move-Konstruktor, Zuweisungsoperator oder Move-Zuweisungsoperator von T oder von einer InputIterator-Operation stammt, hat dies keine Auswirkungen. Wenn eine Ausnahme beim Einfügen eines einzelnen Elements am Ende geworfen wird und T CopyInsertable ist oder std::is_nothrow_move_constructible_v<T> true ist, hat dies keine Auswirkungen. Andernfalls, wenn eine Ausnahme vom Move-Konstruktor eines nicht-CopyInsertable T geworfen wird, sind die Auswirkungen nicht spezifiziert.
Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Ranges-kompatible Konstruktion und Einfügung |
[bearbeiten] Beispiel
#include <cassert> #include <vector> #include <list> int main() { auto head = std::vector{1, 2, 3, 4}; const auto tail = std::list{-5, -6, -7}; #ifdef __cpp_lib_containers_ranges head.append_range(tail); #else head.insert(head.end(), tail.cbegin(), tail.cend()); #endif assert((head == std::vector{1, 2, 3, 4, -5, -6, -7})); }
[bearbeiten] Siehe auch
| (C++23) |
fügt einen Bereich von Elementen ein (öffentliche Memberfunktion) |
| fügt ein Element am Ende hinzu (öffentliche Memberfunktion) | |
| (C++11) |
konstruiert ein Element direkt (in-place) am Ende (öffentliche Memberfunktion) |