最終更新日時: 2026年02月17日 23時22分33秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<deque>

# std::deque::emplace_back(C++11)

    template <class... Args>
    void emplace_back(Args&&... args);                // (1) C++11
    template <class... Args>
    reference emplace_back(Args&&... args);           // (1) C++17
    template <class... Args>
    constexpr reference emplace_back(Args&&... args); // (1) C++26

## 概要

直接構築で新たな要素を末尾に追加する。

この関数の引数 `args...` は、要素型 `value_type` のコンストラクタ引数である。当関数の内部で要素型 `value_type` のコンストラクタを呼び出し、追加する要素を構築する。

## テンプレートパラメータ制約

- `value_type` は、コンテナに対して `args` から直接構築可能であること

## 戻り値

- C++14 まで：なし
- C++17 から：構築した要素への参照

## 計算量

定数時間

## 備考

- この関数の呼び出し後、全てのイテレータは無効化されるが、参照は無効化されない。
- 操作中に例外が発生した場合、副作用は発生しない。

## 例

    #include <iostream>
    #include <deque>
    #include <utility>
    #include <string>

    int main()
    {
      std::deque<std::pair<int, std::string>> c;

      c.emplace_back(3, std::string("hello"));
      c.push_back(std::make_pair(1, std::string("world")));

      for (const auto& x : c) {
        std::cout << x.first << ',' << x.second << std::endl;
      }
    }

### 出力

    3,hello
    1,world

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅
  - 2010にも`emplace_back`は存在するが、`push_back`相当の機能しかない。

## 関連項目

名前 | 説明
--- | ---
`emplace_front` | 先頭に要素を直接構築で追加する
`push_front` | 先頭に要素を追加する
`push_back` | 末尾に要素を追加する
`insert` | 任意の位置に要素を追加する

## 参照

- N2680 Proposed Wording for Placement Insert (Revision 1)
- LWG Issue 2252. Strong guarantee on `vector::push_back()` still broken with C++11?
  - 経緯の説明は、`vector::push_back()`ページを参照。
- P0084R0 Emplace Return Type
- P0084R1 Emplace Return Type (Revision 1)
- P0084R2 Emplace Return Type (Revision 2)
- P3372R3 constexpr containers and adaptors