std::inplace_vector<T,N>:: append_range
|
template
<
container-compatible-range
<
T
>
R
>
constexpr void append_range ( R && rg ) ; |
(depuis C++26) | |
Insère des copies des éléments de la plage
rg
avant
end()
, dans l'ordre non inversé.
Chaque itérateur dans rg est déréférencé exactement une fois.
Table des matières |
Paramètres
| rg | - |
un
intervalle compatible avec un conteneur
, c'est-à-dire un
input_range
dont les éléments sont convertibles en
T
|
| Exigences de type | ||
-
T
n'est pas
EmplaceConstructible
dans
inplace_vector
à partir de
*
ranges::
begin
(
rg
)
, le comportement est indéfini.
|
||
Complexité
Linéaire en fonction de la taille de
rg
. Le nombre d'appels au constructeur de
T
est exactement égal à
std
::
ranges::
size
(
rg
)
)
.
Exceptions
Lance
std::bad_alloc
si
std
::
ranges::
size
(
rg
)
>
N
.
Si une exception est levée autre que par le constructeur de copie, le constructeur de déplacement, l'opérateur d'affectation ou l'opérateur de déplacement de
T
ou par toute opération
InputIterator
, il n'y a aucun effet.
Sinon, si une exception est levée, alors
size
(
)
>=
n
et les éléments dans la plage
[
0
,
n
)
ne sont pas modifiés,
où
n
est la valeur de
size()
avant cet appel.
Exemple
#include <cassert> #include <inplace_vector> #include <iostream> int main() { using I = std::inplace_vector<int, 8>; auto head = I{1, 2, 3, 4}; const auto tail = {-5, -6, -7}; head.append_range(tail); assert(head.size() == 7 and (head == I{1, 2, 3, 4, -5, -6, -7})); try { head.append_range(tail); // lève une exception : pas d'espace } catch(const std::bad_alloc&) { std::cout << "std::bad_alloc\n"; } }
Sortie :
std::bad_alloc
Voir aussi
|
tente d'ajouter une plage d'éléments à la fin
(fonction membre publique) |
|
|
insère une plage d'éléments
(fonction membre publique) |
|
|
ajoute un élément à la fin
(fonction membre publique) |
|
|
construit un élément en place à la fin
(fonction membre publique) |