Namespaces
Variants

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

From cppreference.net
template < class ... Args >
constexpr iterator emplace ( const_iterator position, Args && ... args ) ;
(начиная с C++26)

Вставляет новый элемент в контейнер непосредственно перед pos . Обычно элемент конструируется с использованием placement new для построения элемента на месте в локации, предоставленной контейнером. Аргументы args... передаются в конструктор как std:: forward < Args > ( args ) ... .

Содержание

Параметры

pos - итератор, перед которым будет создан новый элемент
args - аргументы для передачи конструктору элемента
Требования к типам
-
T должен удовлетворять требованиям MoveAssignable , MoveInsertable и EmplaceConstructible .

Возвращаемое значение

Итератор на вставленный элемент.

Сложность

Линейно по расстоянию между pos и end() .

Исключения

Выбрасывает std::bad_alloc если до вызова size ( ) == capacity ( ) . Функция не имеет побочных эффектов ( гарантия строгой безопасности исключений ).

Любое исключение, выброшенное инициализацией вставляемого элемента или любой LegacyInputIterator операцией. Элементы в [ 0 , pos ) не модифицируются.

Пример

#include <cassert>
#include <inplace_vector>
#include <new>
#include <utility>
int main()
{
    using P = std::pair<int, int>;
    using I = std::inplace_vector<P, 3>;
    auto nums = I{{0, 1}, {2, 3}};
    auto it = nums.emplace(nums.begin() + 1, -1, -2);
    assert((*it == P{-1, -2}));
    assert((nums == I{P{0, 1}, {-1, -2}, {2, 3}}));
    try
    {
        nums.emplace(nums.begin(), 1, 3); // выбрасывает исключение: нет места
    }
    catch(const std::bad_alloc& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Возможный вывод:

std::bad_alloc

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

вставляет элементы
(публичная функция-член)
создаёт элемент на месте в конце
(публичная функция-член)