std::inplace_vector<T,N>::try_append_range
template< container-compatible-range<T> R > constexpr std::ranges::borrowed_iterator_t<R> try_append_range( R&& rg ); | (начиная с C++26) (удалено в C++26) |
Добавляет копии начальных элементов из rg перед end(), пока все элементы не будут вставлены или внутреннее хранилище не будет исчерпано (т. е. size() == capacity() равно true).
Все итераторы и ссылки остаются действительными. Итератор end() становится недействительным.
Каждый итератор в rg разыменовывается не более одного раза.
Параметры
| rg | - | диапазон, совместимый с контейнером, то есть input_range, элементы которого преобразуются в T |
| Требования к типам | ||
-T должен удовлетворять требованию EmplaceConstructible для inplace_vector из *ranges::begin(rg). В противном случае поведение не определено. |
||
Возвращаемое значение
Итератор, указывающий на первый элемент rg, который не был вставлен в *this, или ranges::end(rg), если такого элемента нет.
Сложность
Линейная относительно числа вставленных элементов.
Исключения
Любое исключение, выброшенное при инициализации вставленного элемента.
inplace_vector обеспечивает базовую гарантию безопасности исключений, то есть все элементы контейнера, существовавшие до вызова, сохраняются, а все уже вставленные элементы (до возникновения исключения, если оно произошло) также сохраняются.
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_inplace_vector | 202603L | (C++26) | Удалён try_append_range |
Пример
#include <cassert>
#include <initializer_list>
#include <inplace_vector>
int main()
{
#if defined(__cpp_lib_inplace_vector) and (__cpp_lib_inplace_vector < 202603L)
using I = std::inplace_vector<int, 8>;
auto nums = I{1, 2, 3};
const auto rg = {-1, -2, -3};
auto it = nums.try_append_range(rg);
assert(nums.size() == 6);
assert((nums == I{1, 2, 3, -1, -2, -3}));
assert(it == rg.end());
it = nums.try_append_range(rg);
assert(nums.size() == 8);
assert((nums == I{1, 2, 3, -1, -2, -3, -1, -2}));
assert(it == rg.begin() + 2);
#endif
}
См. также
| добавляет диапазон элементов в конец (открытая функция-член) |
|
| добавляет элемент в конец (открытая функция-член) |
|
| пытается добавить элемент в конец (открытая функция-член) |
|
| безусловно добавляет элемент в конец (открытая функция-член) |
|
| создаёт элемент непосредственно в конце (открытая функция-член) |
|
| пытается создать элемент непосредственно в конце (открытая функция-член) |
|
| безусловно создаёт элемент непосредственно в конце (открытая функция-член) |
|
| удаляет последний элемент (открытая функция-член) |
|
создаёт std::back_insert_iterator типа, выводимого из аргумента (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/try_append_range