std::inplace_vector<T,N>::insert_range
De fr.cppreference.net
template< container-compatible-range<T> R >
constexpr iterator insert_range( const_iterator pos, R&& rg );
|
(depuis C++26) | |
Insère, dans l'ordre non inversé, des copies des éléments dans rg avant pos.
| Cette section est incomplète |
Chaque itérateur de la gamme rg est déréférencé exactement une fois.
rg ne doit pas chevaucher le conteneur. Sinon, le comportement est indéfini.
Paramètres
| pos | - |
itérateur avant lequel le contenu sera inséré (
pos
peut être l'itérateur
end()
)
|
| rg | - |
une
plage compatible avec les conteneurs
, c'est-à-dire une
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.
Exceptions
- std::bad_alloc , si ranges:: distance ( rg ) + size ( ) > capacity ( ) . Les éléments de * this ne sont pas modifiés.
-
Toute exception levée par l'insertion (c'est-à-dire par le constructeur de copie/déplacement, l'opérateur d'affectation de déplacement/copie de
T) ou par toute opération LegacyInputIterator . Les éléments de * this dans l'intervalle[ 0 ,pos)ne sont pas modifiés.
Exemple
Exécuter ce code
#include <cassert> #include <inplace_vector> #include <iterator> #include <new> #include <print> int main() { auto v = std::inplace_vector<int, 8>{0, 1, 2, 3}; auto pos = std::next(v.begin(), 2); assert(*pos == 2); const auto rg = {-1, -2, -3}; v.insert_range(pos, rg); std::println("{}", v); try { assert(v.size() + rg.size() > v.capacity()); v.insert_range(pos, rg); // throws: no space } catch(const std::bad_alloc& ex) { std::println("{}", ex.what()); } }
Sortie possible :
[0, 1, -1, -2, -3, 2, 3] std::bad_alloc
Voir aussi
|
insère des éléments
(fonction membre publique) |
|
|
ajoute une plage d'éléments à la fin
(fonction membre publique) |
|
|
tente d'ajouter une plage d'éléments à la fin
(fonction membre publique) |