std::inplace_vector<T,N>::emplace
template< class... Args > constexpr iterator emplace( const_iterator position, Args&&... args ); | (начиная с C++26) |
Вставляет новый элемент в контейнер непосредственно перед pos. Обычно элемент создаётся непосредственно на месте с помощью размещающего 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 <iostream>
#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); // throws: no space
}
catch(const std::bad_alloc& ex)
{
std::cout << ex.what() << '\n';
}
}
Возможный вывод:
std::bad_alloc
См. также
| вставляет элементы (открытая функция-член) |
|
| создаёт элемент непосредственно на месте в конце (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/emplace