std::vector<T,Allocator>:: append_range
|
template
<
container-compatible-range
<
T
>
R
>
constexpr void append_range ( R && rg ) ; |
(начиная с C++23) | |
Вставляет копии элементов из диапазона
rg
перед
end()
, в прямом порядке.
Если после операции новый
size()
превышает старый
capacity()
, происходит перераспределение памяти, и в этом случае все итераторы (включая итератор
end()
) и все ссылки на элементы становятся недействительными. В противном случае недействительным становится только итератор
end()
.
Каждый итератор в rg разыменовывается ровно один раз.
Содержание |
Параметры
| rg | - |
a
container compatible range
, that is, an
input_range
whose elements are convertible to
T
|
| Type requirements | ||
-
|
||
Сложность
Если происходит перераспределение памяти, сложность линейна по количеству элементов в результирующем
vector
; в противном случае - линейна по количеству вставленных элементов плюс расстояние до
end()
.
|
Если удовлетворяется одно из следующих условий, выполняется не более одного перераспределения памяти:
|
(начиная с C++26) |
Исключения
Если исключение выбрасывается не конструктором копирования, конструктором перемещения, оператором присваивания или оператором перемещающего присваивания
T
или любой операцией
InputIterator
, эффекты отсутствуют. Если исключение выбрасывается при вставке отдельного элемента в конец и
T
является
CopyInsertable
или
std::is_nothrow_move_constructible_v
<T>
равно
true
, эффекты отсутствуют. В противном случае, если исключение выбрасывается конструктором перемещения не-
CopyInsertable
T
, эффекты не определены.
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-aware конструирование и вставка |
Пример
#include <cassert> #include <vector> #include <list> int main() { auto head = std::vector{1, 2, 3, 4}; const auto tail = std::list{-5, -6, -7}; #ifdef __cpp_lib_containers_ranges head.append_range(tail); #else head.insert(head.end(), tail.cbegin(), tail.cend()); #endif assert((head == std::vector{1, 2, 3, 4, -5, -6, -7})); }
Смотрите также
|
(C++23)
|
вставляет диапазон элементов
(публичная функция-член) |
|
добавляет элемент в конец
(публичная функция-член) |
|
|
(C++11)
|
конструирует элемент на месте в конце
(публичная функция-член) |