std::vector<T,Allocator>:: insert_range
|
template
<
container-compatible-range
<
T
>
R
>
constexpr iterator insert_range ( const_iterator pos, R && rg ) ; |
(depuis C++23) | |
Insère, dans l'ordre non inversé, des copies des éléments de rg avant pos .
Si après l'opération la nouvelle
size()
est supérieure à l'ancienne
capacity()
, une réallocation se produit, auquel cas tous les itérateurs (y compris l'itérateur
end()
) et toutes les références aux éléments sont invalidés. Sinon, seuls les itérateurs et références avant le point d'insertion restent valides.
Chaque itérateur dans la plage rg est déréférencé exactement une fois.
Si rg chevauche * this , le comportement est indéfini.
Table des matières |
Paramètres
| pos | - |
itérateur avant lequel le contenu sera inséré (
pos
peut être l'itérateur
end()
)
|
| rg | - |
un
intervalle compatible avec le conteneur
, c'est-à-dire un
input_range
dont les éléments sont convertibles en
T
|
| Exigences de type | ||
-
|
||
Valeur de retour
Un itérateur vers le premier élément inséré dans * this , ou pos si rg est vide.
ComplexitéSi l'une des conditions suivantes est satisfaite, effectue au plus une réallocation :
|
(depuis C++26) |
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construction et insertion compatibles avec les gammes |
Exemple
#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})); }
Voir aussi
|
insère des éléments
(fonction membre publique) |
|
|
(C++23)
|
ajoute une plage d'éléments à la fin
(fonction membre publique) |