std::inplace_vector<T,N>::emplace
来自 cppreference.com
template< class... Args > constexpr iterator emplace( const_iterator position, Args&&... args ); |
(自 C++26 起) | |
在容器中 pos 之前插入一个新元素。 通常,元素是使用就地-new构造的,以便在容器提供的地址处就地构造元素。 参数 args... 被转发到构造函数中,作为 std::forward<Args>(args)....
内容 |
[编辑] 参数
pos | - | 将在其之前构造新元素的迭代器 |
args | - | 要转发到元素构造函数的参数 |
类型要求 | ||
-T 必须满足 EmplaceConstructible 的要求。 |
[编辑] 返回值
指向插入元素的迭代器。
[编辑] 复杂度
线性:pos 与容器末尾之间的距离 + 1。
[编辑] 异常
- 如果在调用之前 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); // throws: no space } catch(const std::bad_alloc& ex) { std::cout << ex.what() << '\n'; } }
可能的输出
std::bad_alloc
[编辑] 另请参阅
插入元素 (公共成员函数) | |
在末尾就地构造元素 (公共成员函数) |