std::inplace_vector<T,N>::try_emplace_back
template< class... Args >
constexpr std::optional<reference> try_emplace_back( Args&&... args );
|
(C++26 以降) | |
条件付きで、型 T のオブジェクトをコンテナの末尾に追加します。
もし size() == capacity() が true の場合、効果はありません。そうでなければ、直接非リスト初期化で std::forward<Args>(args)... 型のオブジェクトを追加しますT
イテレータや参照は無効になりません。ただし、end()、挿入が発生すると無効になります。
パラメータ
| args | - | 要素のコンストラクタに転送する引数 |
| 型要件 | ||
-
T
は
EmplaceConstructible
でなければならず、
inplace_vector
内で
std::
forward
<
Args
>
(
args
)
...
から構築可能であること。
|
||
戻り値
std:: addressof ( back ( ) ) size size ( ) < capacity ( ) の場合、 nullptr それ以外の場合。
計算量
定数。
例外
挿入された要素の初期化によって送出されるあらゆる例外。何らかの理由で例外が送出された場合、この関数は何も効果を持ちません( strong exception safety guarantee )。
注釈
| このセクションは不完全です 理由:このAPIの目的を説明する。 |
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_inplace_vector |
202603L |
(C++26) | より良い戻り値の型 (std::optional<reference> の代わりに pointer) に対する try_push_back および try_emplace_back
|
例
#include <cassert>
#include <complex>
#include <inplace_vector>
#include <optional>
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};
std::optional<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); // no space => no insertion
assert(c == std::nullopt);
assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}
関連項目
|
末尾に要素をその場で構築する
(公開メンバ関数) |
|
|
末尾に要素を追加する
(公開メンバ関数) |
|
|
末尾に要素の範囲を追加する
(公開メンバ関数) |
|
|
末尾に要素の範囲を追加しようと試みる
(公開メンバ関数) |
|
|
無条件に末尾に要素をその場で構築する
(公開メンバ関数) |
|
|
無条件に末尾に要素を追加する
(公開メンバ関数) |
|
|
末尾の要素を削除する
(公開メンバ関数) |
|
|
引数から推論された型の
std::back_insert_iterator
を作成する
(関数テンプレート) |