Namespaces
Variants

std::inplace_vector<T,N>::try_append_range

От ru.cppreference.net
 
 
 
 
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 - a container compatible range , that is, an input_range whose elements are convertible to 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
}

Смотрите также

добавляет диапазон элементов в конец
(public member function)
добавляет элемент в конец
(public member function)
пытается добавить элемент в конец
(public member function)
безусловно добавляет элемент в конец
(public member function)
конструирует элемент на месте в конце
(public member function)
пытается сконструировать элемент на месте в конце
(public member function)
безусловно конструирует элемент на месте в конце
(public member function)
удаляет последний элемент
(public member function)
создает std::back_insert_iterator типа, выведенного из аргумента
(function template)