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 <queue>
#include <string>
#include <utility>
int main()
{
std::queue<std::pair<int, std::string>> que;
que.emplace(3, "aaa");
que.emplace(1, "bbb");
que.emplace(4, "ccc");
while (!que.empty()) {
std::cout << que.front().first << ", " << que.front().second << std::endl;
que.pop();
}
}
出力
3, aaa
1, bbb
4, ccc
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++:
備考
C++17 規格が発行された段階では戻り値型が reference
に変更されていたが、そうしてしまうと emplace_back
が参照を返さないコンテナと共に使用している既存のコードを破壊してしまうため、規格の誤りとして戻り値型が更に decltype(auto)
に変更された。
関連項目
名前 | 説明 |
---|---|
push |
要素を追加する |