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.
Falls nach der Operation die neue
size()
größer als die alte
capacity()
ist, erfolgt eine Reallokation, bei der alle Iteratoren (einschließlich des
end()
-Iterators) und alle Referenzen auf die Elemente ungültig werden. Andernfalls wird nur der
end()
-Iterator ungültig.
Jeder Iterator in rg wird genau einmal dereferenziert.
Inhaltsverzeichnis |
Parameter
| rg | - |
ein
container-kompatibler Bereich
, d.h. ein
input_range
, dessen Elemente in
T
konvertierbar sind
|
| Typanforderungen | ||
-
|
||
Komplexität
Falls eine Neuzuordnung stattfindet, linear in der Anzahl der Elemente des resultierenden
vector
; andernfalls linear in der Anzahl der eingefügten Elemente plus der Entfernung zum
end()
.
|
Wenn eine der folgenden Bedingungen erfüllt ist, führt höchstens eine Reallokation durch:
|
(seit C++26) |
Ausnahmen
Wenn eine Ausnahme ausgelöst wird, die nicht vom Kopierkonstruktor, Move-Konstruktor, Zuweisungsoperator oder Move-Zuweisungsoperator von
T
oder von einer
InputIterator
-Operation stammt, gibt es keine Effekte. Wenn eine Ausnahme beim Einfügen eines einzelnen Elements am Ende ausgelöst wird und
T
CopyInsertable
ist oder
std::is_nothrow_move_constructible_v
<T>
true
ist, gibt es keine Effekte. Andernfalls, wenn eine Ausnahme vom Move-Konstruktor eines nicht-
CopyInsertable
T
ausgelöst wird, sind die Effekte nicht spezifiziert.
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-basierte Konstruktion und Einfügung |
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})); }
Siehe auch
|
(C++23)
|
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion) |
|
fügt ein Element am Ende hinzu
(öffentliche Elementfunktion) |
|
|
(C++11)
|
konstruiert ein Element direkt am Ende
(öffentliche Elementfunktion) |