std::vector<T,Allocator>:: insert_range
|
template
<
container-compatible-range
<
T
>
R
>
constexpr iterator insert_range ( const_iterator pos, R && rg ) ; |
(seit C++23) | |
Fügt, in nicht umgekehrter Reihenfolge, Kopien der Elemente in rg vor pos ein.
Falls nach der Operation die neue
size()
größer als die alte
capacity()
ist, erfolgt eine Neuzuweisung, bei der alle Iteratoren (einschließlich des
end()
-Iterators) und alle Referenzen auf die Elemente ungültig werden. Andernfalls bleiben nur die Iteratoren und Referenzen vor der Einfügeposition gültig.
Jeder Iterator im Bereich rg wird genau einmal dereferenziert.
Wenn rg sich mit * this überschneidet, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| pos | - |
Iterator vor dem der Inhalt eingefügt wird (
pos
kann der
end()
Iterator sein)
|
| rg | - |
ein
container-kompatibler Bereich
, also ein
input_range
, dessen Elemente in
T
konvertierbar sind
|
| Typanforderungen | ||
-
|
||
Rückgabewert
Ein Iterator auf das erste in * this eingefügte Element, oder pos falls rg leer ist.
KomplexitätWenn eine der folgenden Bedingungen erfüllt ist, führt höchstens eine Neuzuweisung durch:
|
(seit C++26) |
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-basierte Konstruktion und Einfügung |
Beispiel
#include <algorithm> #include <cassert> #include <iterator> #include <vector> #include <list> int main() { auto container = std::vector{1, 2, 3, 4}; auto pos = std::next(container.begin(), 2); assert(*pos == 3); const auto rg = std::list{-1, -2, -3}; #ifdef __cpp_lib_containers_ranges container.insert_range(pos, rg); #else container.insert(pos, rg.cbegin(), rg.cend()); #endif assert(std::ranges::equal(container, std::vector{1, 2, -1, -2, -3, 3, 4})); }
Siehe auch
|
fügt Elemente ein
(öffentliche Elementfunktion) |
|
|
(C++23)
|
fügt eine Reihe von Elementen am Ende hinzu
(öffentliche Elementfunktion) |