Namespaces
Variants

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

From cppreference.net
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 end() の間の距離に対して線形。

例外

サイズが呼び出し前に 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& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

出力例:

std::bad_alloc

関連項目

要素を挿入する
(公開メンバ関数)
末尾に要素をその場で構築する
(公開メンバ関数)