std::inplace_vector<T,N>::emplace
ja.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 <iostream>
#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
関連項目
|
要素を挿入する
(公開メンバ関数) |
|
|
末尾に要素をその場で構築する
(公開メンバ関数) |