Skip to content

Latest commit

 

History

History
100 lines (77 loc) · 2.67 KB

File metadata and controls

100 lines (77 loc) · 2.67 KB

emplace

  • stack[meta header]
  • std[meta namespace]
  • stack[meta class]
  • function template[meta id-type]
  • cpp11[meta cpp]
template <class... Args>
void emplace(Args&&... args);                     // (1) C++11
template <class... Args>
decltype(auto) emplace(Args&&... args);           // (1) C++17
template <class... Args>
constexpr decltype(auto) emplace(Args&&... args); // (1) C++26

概要

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

効果

  • C++14 まで

c.emplace_back(std::forward(args)...);


- C++17 から
	```cpp
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();
  }
}
  • emplace[color ff0000]
  • st.empty()[link empty.md]
  • st.top()[link top.md]
  • st.pop()[link pop.md]

出力

4, ccc
1, bbb
3, aaa

バージョン

言語

  • C++11

処理系

備考

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

関連項目

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

参照