- 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
- Clang: 3.2 [mark verified]
- GCC: 4.4 [mark verified]
- ICC: ??
- Visual C++: ??
C++17 規格が発行された段階では戻り値型が reference に変更されていたが、そうしてしまうと emplace_back が参照を返さないコンテナと共に使用している既存のコードを破壊してしまうため、規格の誤りとして戻り値型が更に decltype(auto) に変更された。
| 名前 | 説明 |
|---|---|
push |
要素を追加する |