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}));
}
См. также
| создаёт элемент непосредственно в конце контейнера (открытая функция-член) |
|
| добавляет элемент в конец контейнера (открытая функция-член) |
|
| добавляет диапазон элементов в конец контейнера (открытая функция-член) |
|
| пытается добавить диапазон элементов в конец контейнера (открытая функция-член) |
|
| безусловно создаёт элемент непосредственно в конце контейнера (открытая функция-член) |
|
| безусловно добавляет элемент в конец контейнера (открытая функция-член) |
|
| удаляет последний элемент (открытая функция-член) |
|
создаёт 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