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(容器的元素类型) 必须满足可移动赋值 (MoveAssignable) 可移动插入 (MoveInsertable) 可就位构造 (EmplaceConstructible)

返回值

指向被插入的元素的迭代器。

复杂度

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&)
    {
        /*...*/
    }
}

参阅

插入元素
(公开成员函数)
在容器末尾原位构造元素
(公开成员函数)