std::inplace_vector<T,N>::try_emplace_back

来自cppreference.com
 
 
 
 
template< class... Args >
constexpr pointer try_emplace_back( Args&&... args );
(C++26 起)

有条件地追加 T 类型对象到容器尾部。

size() == capacity()true 那么此函数无效果。否则向容器追加一个以 std::forward<Args>(args)... 直接初始化T 类型的对象。


参数

args - 转发给元素构造函数的实参
类型要求
-
T 必须满足从实参 std::forward<Args>(args)... 可就位构造 (EmplaceConstructible) inplace_vector

返回值

size() < capacity() 则为 std::addressof(back()),否则为 nullptr

复杂度

常数。

异常

由被插入元素的初始化抛出的任何异常。如果因为任何原因抛出了异常,那么此函数无效果(强异常安全保证)。

注解

示例

#include <cassert>
#include <complex>
#include <inplace_vector>
 
int main()
{
    using namespace std::complex_literals;
    using C = std::complex<double>;
    using I = std::inplace_vector<C, 3>;
    auto v = I{1.0 + 2.0i, 3.0 + 4.0i};
 
    C* c = v.try_emplace_back(5.0, 6.0);
    assert(*c == 5.0 + 6.0i);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
 
    c = v.try_emplace_back(7.0, 8.0); // 没有空间 => 未发生插入
    assert(c == nullptr);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}

参阅

在容器末尾原位构造元素
(公开成员函数)
将元素添加到容器末尾
(公开成员函数)
添加元素的范围到末尾
(公开成员函数)
尝试添加元素的范围到末尾
(公开成员函数)
无条件在容器末尾原位构造元素
(公开成员函数)
无条件将元素添加到容器末尾
(公开成员函数)
移除末元素
(公开成员函数)
创建拥有从实参推出的类型的 std::back_insert_iterator
(函数模板)