Spec-Zone.ru › C++

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
}

См. также

append_range
добавляет диапазон элементов в конец
(открытая функция-член)
push_back
добавляет элемент в конец
(открытая функция-член)
try_push_back
пытается добавить элемент в конец
(открытая функция-член)
unchecked_push_back
безусловно добавляет элемент в конец
(открытая функция-член)
emplace_back
создаёт элемент непосредственно в конце
(открытая функция-член)
try_emplace_back
пытается создать элемент непосредственно в конце
(открытая функция-член)
unchecked_emplace_back
безусловно создаёт элемент непосредственно в конце
(открытая функция-член)
pop_back
удаляет последний элемент
(открытая функция-член)
back_inserter
создаёт 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API