Namespaces
Variants

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

ja.cppreference.net から
 
 
 
 
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 )。

注釈

機能テストマクロ 値 規格 機能
__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 を作成する
(関数テンプレート)