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

履歴 編集

function template
<list>

# std::list::emplace(C++11)

    template <class... Args>
    iterator
      emplace(const_iterator position,
              Args&&... args); // (1) C++11
    template <class... Args>
    constexpr iterator
      emplace(const_iterator position,
              Args&&... args); // (1) C++26

## 概要

任意の位置に直接構築で要素を挿入する。
この関数の引数`args...`は、要素型`T`のコンストラクタ引数である。当関数の内部で要素型`T`のコンストラクタを呼び出し、追加する要素を構築する。

第1パラメータ`position`で指定された要素の前に追加する。

## 要件

第1パラメータ`position`が、イテレータ範囲`[begin(), end()]`の間接参照可能なイテレータであること。

## 戻り値

挿入された要素を指すイテレータ

## 計算量

定数時間

## 例

    #include <iostream>
    #include <list>
    #include <iterator>
    #include <utility>
    #include <string>

    int main()
    {
      std::list<std::pair<int, std::string>> ls = {
        {2, "b"},
        {3, "c"},
        {4, "d"}
      };

      ls.emplace(ls.begin(), 1, "a");

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

### 出力

    1,a
    2,b
    3,c
    4,d

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.1 ✅
- GCC: 4.6.4 ✅
- ICC: ??
- Visual C++: ??

## 参照

- N2345 Placement Insert for Containers (Revision 2)
- P3372R3 constexpr containers and adaptors