Namespaces
Variants

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

From cppreference.net
template < container-compatible-range < T > R >
constexpr std :: ranges:: borrowed_iterator_t < R > try_append_range ( R && rg ) ;
(начиная с 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 предоставляет базовую гарантию безопасности исключений , то есть все элементы контейнера до вызова сохраняются, и все уже вставленные элементы (до исключения, если таковое возникло) также сохраняются.

Примечания

Пример

#include <cassert>
#include <initializer_list>
#include <inplace_vector>
int main()
{
    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);
}

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

добавляет диапазон элементов в конец
(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)