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

履歴 編集

function template
<stack>

std::stack::emplace(C++11)

template <class... Args>
void emplace(Args&&... args);               // C++14 まで

template <class... Args>
decltype(auto) emplace(Args&&... args);     // C++17 から

概要

要素型 value_type のコンストラクタ引数をとり、直接構築でスタックに要素を追加する。

効果

  • C++14 まで

    c.emplace_back(std::forward<Args>(args)...);
    

  • C++17 から

    return c.emplace_back(std::forward<Args>(args)...);
    

戻り値

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

#include <iostream>
#include <stack>
#include <string>
#include <utility>

int main()
{
  std::stack<std::pair<int, std::string>> st;

  st.emplace(3, "aaa");
  st.emplace(1, "bbb");
  st.emplace(4, "ccc");

  while (!st.empty()) {
    std::cout << st.top().first << ", " << st.top().second << std::endl;
    st.pop();
  }
}

出力

4, ccc
1, bbb
3, aaa

バージョン

言語

  • C++11

処理系

備考

C++17 規格が発行された段階では戻り値型が reference に変更されていたが、そうしてしまうと emplace_back が参照を返さないコンテナと共に使用している既存のコードを破壊してしまうため、規格の誤りとして戻り値型が更に decltype(auto) に変更された。

関連項目

名前 説明
push 要素を追加する

参照