名稱空間
變體
操作

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

來自 cppreference.com
 
 
 
 
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) 的要求。

[編輯] 返回值

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

[編輯] 複雜度

posend() 之間的距離呈線性關係。

[編輯] 異常

如果在呼叫前 size() == capacity(),則丟擲 std::bad_alloc。該函式無副作用(強異常安全保證)。

由插入元素的初始化或任何 舊式輸入迭代器 (LegacyInputIterator) 操作丟擲的任何異常。位於 [0pos) 的元素未被修改。

[編輯] 示例

#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

[編輯] 參閱

插入元素
(公共成員函式) [編輯]
就地構造元素於結尾
(公共成員函式) [編輯]