Spec-Zone.ru › C++

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

template< class... Args >
constexpr std::optional<reference> try_emplace_back( Args&&... args );
(начиная с C++26)

Условно добавляет объект типа T в конец контейнера.

Если size() == capacity() равно true, никаких действий не выполняется. В противном случае непосредственно инициализирует без списка объект типа T с помощью std::forward<Args>(args)... и добавляет его.

Никакие итераторы или ссылки не становятся недействительными, за исключением end(), который становится недействительным, если происходит вставка.

Параметры

args - аргументы, передаваемые конструктору элемента
Требования к типам
-T должен удовлетворять требованиям EmplaceConstructible для inplace_vector из std::forward<Args>(args)....

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

std::nullopt, если size() == capacity(), иначе std::optional<reference>(std::in_place, back()).

Сложность

Константная.

Исключения

Любое исключение, выброшенное при инициализации вставляемого элемента. Если по любой причине выбрасывается исключение, эта функция не оказывает никакого эффекта (строгая гарантия безопасности исключений).

Примечания

Макрос проверки поддержки функции Значение Стандарт Функция
__cpp_lib_inplace_vector 202603L (C++26) Улучшенный тип возвращаемого значения (std::optional<reference> вместо pointer) для try_push_back и try_emplace_back

Пример

#include <cassert>
#include <complex>
#include <inplace_vector>
#include <optional>

int main()
{
    using namespace std::complex_literals;
    using C = std::complex<double>;
    using I = std::inplace_vector<C, 3>;
    auto v = I{1.0 + 2.0i, 3.0 + 4.0i};

    std::optional<C&> c = v.try_emplace_back(5.0, 6.0);
    assert(*c == 5.0 + 6.0i);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));

    c = v.try_emplace_back(7.0, 8.0); // no space => no insertion
    assert(c == std::nullopt);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}

См. также

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

Spec-Zone.ru

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