Namespaces
Variants

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

From cppreference.net

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

Rückgabewert

Ein Iterator auf das erste in * this eingefügte Element, oder pos falls rg leer ist.

Komplexität

Wenn 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)
fügt eine Reihe von Elementen am Ende hinzu
(öffentliche Elementfunktion)