std::inplace_vector<T,N>:: emplace
|
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
Смотрите также
|
вставляет элементы
(публичная функция-член) |
|
|
создаёт элемент на месте в конце
(публичная функция-член) |