std::inplace_vector<T,N>::emplace
来自cppreference.com
< cpp | container | inplace vector
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 和容器结尾的距离成线性。
异常
- 如果在调用之前 size() == capacity() 则抛出 std::bad_alloc,且此函数无效果(强异常保证)。
- 由被插入元素的初始化或任何老式输入迭代器 (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&) { /*...*/ } }
参阅
插入元素 (公开成员函数) | |
在容器末尾原位构造元素 (公开成员函数) |