std::inplace_vector<T,N>::append_range
template< container-compatible-range<T> R >
constexpr void append_range( R&& rg );
|
(начиная с C++26) | |
Вставляет копии элементов из диапазона rg перед end(), в необратном порядке.
Каждый итератор в rg разыменовывается ровно один раз.
Параметры
| rg | - |
a
container compatible range
, that is, an
input_range
whose elements are convertible to
T
|
| Type requirements | ||
-
T
is not
EmplaceConstructible
into
inplace_vector
from
*
ranges::
begin
(
rg
)
, the behavior is undefined.
|
||
Сложность
Линейно по размеру
rg
. Количество вызовов конструктора
T
точно равно
std
::
ranges::
size
(
rg
)
)
.
Исключения
Выбрасывает
std::bad_alloc
если
std
::
ranges::
size
(
rg
)
>
N
.
Если исключение выбрасывается не конструктором копирования, конструктором перемещения, оператором присваивания или оператором перемещающего присваивания
T
или любой операцией
InputIterator
, эффекты отсутствуют.
В противном случае, если исключение выбрасывается, то
size
(
)
>=
n
и элементы в диапазоне
[
0
,
n
)
не модифицируются,
где
n
- значение
size()
до этого вызова.
Пример
#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); // throws: no space } catch(const std::bad_alloc&) { std::cout << "std::bad_alloc\n"; } }
Вывод:
std::bad_alloc
См. также
| вставляет диапазон элементов (открытая функция-элемент) | |
| добавляет элемент в конец (открытая функция-элемент) | |
| создаёт элемент на месте в конце (открытая функция-элемент) |