• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <vector>

    std::vector::emplace

    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

    処理系

    参照