Namespaces
Variants

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

ja.cppreference.net から
 
 
 
 
template< class... Args >
constexpr reference emplace_back( Args&&... args );
(C++26以降)

コンテナの末尾に新しい要素を追加します。通常、要素は配置-newを使用して、コンテナが提供する位置にその場で構築されます。引数args...はコンストラクタにstd::forward<Args>(args)...として転送されます。

イテレータや参照は無効化されません。ただし、end()は挿入が行われた場合に無効化されます。

パラメータ

args - 要素のコンストラクタに転送する引数
型要件
-
T は EmplaceConstructible の要件を満たさなければならない。

戻り値

back() 、すなわち挿入された要素への参照。

計算量

定数。

例外

  • std::bad_alloc がスローされる条件: size ( ) == capacity ( ) が呼び出し前に成立する場合。
  • 挿入される要素の初期化によってスローされるあらゆる例外。

何らかの理由で例外がスローされた場合、これらの関数は何も効果を持ちません( strong exception safety guarantee )。

例

#include <inplace_vector>
#include <new>
#include <print>
#include <string>
#include <utility>
int main()
{
    std::inplace_vector<std::pair<std::string, std::string>, 2> fauna;
    std::string dog{"\N{DOG}"};
    fauna.emplace_back("\N{CAT}", dog);
    fauna.emplace_back("\N{CAT}", std::move(dog));
    std::println("fauna = {}", fauna);
    try
    {
        fauna.emplace_back("\N{BUG}", "\N{BUG}"); // スロー: 空き領域がありません
    }
    catch(const std::bad_alloc& ex)
    {
        std::println("{}", ex.what());
    }
    std::println("fauna = {}", fauna);
}

出力例:

fauna = [("🐈", "🐕"), ("🐈", "🐕")]
std::bad_alloc
fauna = [("🐈", "🐕"), ("🐈", "🐕")]

関連項目

末尾に要素の範囲を追加する
(公開メンバ関数)
末尾に要素を追加する
(公開メンバ関数)
末尾に要素を追加しようと試みる
(公開メンバ関数)
末尾に要素をその場で構築しようと試みる
(公開メンバ関数)
末尾に要素の範囲を追加しようと試みる
(公開メンバ関数)
無条件に末尾に要素を追加する
(公開メンバ関数)
無条件に末尾に要素をその場で構築する
(公開メンバ関数)
最後の要素を削除する
(公開メンバ関数)
引数から推論された型の std::back_insert_iterator を作成する
(関数テンプレート)