template <class... Args>
void emplace_back(Args&&... args); // C++14 まで
template <class... Args>
reference emplace_back(Args&&... args); // C++17 から
概要
直接構築で新たな要素を末尾に追加する。
この関数の引数 args...
は、要素型 value_type
のコンストラクタ引数である。当関数の内部で要素型 value_type
のコンストラクタを呼び出し、追加する要素を構築する。
テンプレートパラメータ制約
value_type
は、コンテナに対してargs
から直接構築可能であること
戻り値
- C++14 まで:なし
- C++17 から:構築した要素への参照
計算量
定数時間
備考
- この関数の呼び出し後、全てのイテレータは無効化されるが、参照は無効化されない。
- 操作中に例外が発生した場合、副作用は発生しない。
例
#include <iostream>
#include <deque>
#include <utility>
#include <string>
int main()
{
std::deque<std::pair<int, std::string>> c;
c.emplace_back(3, std::string("hello"));
c.push_back(std::make_pair(1, std::string("world")));
for (const auto& x : c) {
std::cout << x.first << ',' << x.second << std::endl;
}
}
出力
3,hello
1,world
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅
- 2010にも
emplace_back
は存在するが、push_back
相当の機能しかない。
- 2010にも
関連項目
名前 | 説明 |
---|---|
emplace_front |
先頭に要素を直接構築で追加する |
push_front |
先頭に要素を追加する |
push_back |
末尾に要素を追加する |
insert |
任意の位置に要素を追加する |