Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
template< container-compatible-range<T> R >
constexpr iterator insert_range( const_iterator pos, R&& rg );
(seit C++23)

Fügt Kopien von Elementen aus rg in nicht umgekehrter Reihenfolge vor pos ein.

Wenn nach der Operation die neue size() größer ist als die alte capacity(), findet eine Reallokation statt, in diesem Fall werden alle Iteratoren (einschließlich des end() Iterators) und alle Referenzen auf die Elemente ungültig. Andernfalls bleiben nur die Iteratoren und Referenzen vor dem Einfügepunkt gültig.

Jeder Iterator im Bereich rg wird genau einmal dereferenziert.

rg darf sich nicht mit dem Container überlappen. Andernfalls ist das Verhalten undefiniert.

Inhalt

[edit] Parameter

pos - Iterator, vor dem der Inhalt eingefügt wird (pos kann der end()-Iterator sein)
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. Außerdem muss T in vector MoveInsertable sein und T muss MoveConstructible, MoveAssignable und Swappable erfüllen. Andernfalls ist das Verhalten undefiniert.

[edit] Rückgabewert

Ein iterator, der auf die Kopie des ersten in vector eingefügten Elements oder auf pos zeigt, falls rg leer ist.

Anmerkungen

Feature-Test-Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-kompatible Konstruktion und Einfügung

[edit] 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}));
}

[edit] Siehe auch

fügt Elemente ein
(öffentliche Memberfunktion)
fügt einen Bereich von Elementen am Ende hinzu
(öffentliche Memberfunktion)