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 | - | диапазон, совместимый с контейнером контейнерами, то есть input_range, элементы которого можно преобразовать в T |
| Требования к типу | ||
-T должен быть EmplaceConstructible в vector из *ranges::begin(rg). Кроме того, T должен быть MoveInsertable в vector. В противном случае поведение не определено. |
||
Возвращаемое значение
(не используется)
Сложность
Если происходит перераспределение, линейная от количества элементов в получившемся vector; в противном случае, линейная от количества вставленных элементов плюс расстояние до end().
Исключения
Если возникает исключение, помимо исключений, вызываемых конструктором копирования, конструктором перемещения, оператором присваивания или оператором перемещения присваивания T или любой операцией InputIterator, то эффекты не определены. Если исключение возникает при вставке одного элемента в конец, и T является CopyInsertable или std::is_nothrow_move_constructible_v<T> является true, то эффекты не определены. В противном случае, если исключение возникает из-за конструктора перемещения для не-CopyInsertable T, эффекты не определены.
Примечания
| Макрос проверки наличия функции | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Работа с диапазонами при создании и вставке |
Пример
#include <algorithm>
#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(std::ranges::equal(head, std::vector{1, 2, 3, 4, -5, -6, -7}));
}См. также
|
(C++23) | вставляет диапазон элементов (публичный член-функция) |
| добавляет элемент в конец (публичный член-функция) |
|
|
(C++11) | создаёт элемент на месте в конце (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/vector/append_range