Namespaces
Variants

std::vector<T,Allocator>:: append_range

From cppreference.net

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
-
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:

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

fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion)
fügt ein Element am Ende hinzu
(öffentliche Elementfunktion)
konstruiert ein Element direkt am Ende
(öffentliche Elementfunktion)