Namespaces
Variants

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

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

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

イテレータおよび参照は無効化されません。ただし、挿入が発生した場合、 end() は無効化されます。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Parameters、Return value、Complexity、Exceptions、Example、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持されています

パラメータ

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 を作成する
(関数テンプレート)