最終更新日時(UTC):
が更新

履歴 編集

function template
<vector>

std::vector::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++20

template <class... Args>
iterator
  vector<bool>::emplace(const_iterator position,
                        Args&&... args);         // (2) C++14
template <class... Args>
constexpr iterator
  vector<bool>::emplace(const_iterator position,
                        Args&&... args);         // (2) C++20

概要

任意の位置に要素を直接構築で挿入する

要件

要素型 value_type は、引数 args からコンテナに対して EmplaceConstructible でなければならない。また、要素型 value_type はコンテナに対して、MoveInsertable であり、かつ、MoveAssignable でなければならない。

効果

std::forward<Args>(args)... で構築された value_type 型のオブジェクトを position の手前に挿入する。

戻り値

args から構築され vector に新規に追加された要素を指すイテレータを返す。

計算量

挿入される要素の数と挿入される要素の位置とend()の間の要素数に対して、線形時間の計算量が必要である。

備考

  • 再確保の可能性、イテレータの有効性への影響、例外発生時に副作用が発生しない保証はいずれもinsert()と同様。

#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <algorithm>

int main()
{
  std::vector<std::pair<int, std::string>> v;

  v.emplace(v.begin(), 3, std::string("hello"));
  v.insert(v.begin(), std::make_pair(1, std::string("world")));

  std::for_each(v.begin(), v.end(), [](decltype(v)::const_reference x) {
    std::cout << x.first << ',' << x.second << std::endl;
  });
}

出力

1,world
3,hello

バージョン

言語

  • C++11

処理系

参照