template <class... Args>
iterator
emplace(const_iterator position, Args&&... args); // (1) C++11
template <class... Args>
constexpr iterator
emplace(const_iterator position, Args&&... args); // (1) C++20
template <class... Args>
iterator
vector<bool>::emplace(const_iterator position,
Args&&... args); // (2) C++14
template <class... Args>
constexpr iterator
vector<bool>::emplace(const_iterator position,
Args&&... args); // (2) C++20
概要
任意の位置に要素を直接構築で挿入する
要件
要素型 value_type
は、引数 args
からコンテナに対して EmplaceConstructible
でなければならない。また、要素型 value_type
はコンテナに対して、MoveInsertable
であり、かつ、MoveAssignable
でなければならない。
効果
std::forward<Args>(args)...
で構築された value_type
型のオブジェクトを position
の手前に挿入する。
戻り値
args
から構築され vector
に新規に追加された要素を指すイテレータを返す。
計算量
挿入される要素の数と挿入される要素の位置とend()
の間の要素数に対して、線形時間の計算量が必要である。
備考
- 再確保の可能性、イテレータの有効性への影響、例外発生時に副作用が発生しない保証はいずれも
insert()
と同様。
例
#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <algorithm>
int main()
{
std::vector<std::pair<int, std::string>> v;
v.emplace(v.begin(), 3, std::string("hello"));
v.insert(v.begin(), std::make_pair(1, std::string("world")));
std::for_each(v.begin(), v.end(), [](decltype(v)::const_reference x) {
std::cout << x.first << ',' << x.second << std::endl;
});
}
xxxxxxxxxx
#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <algorithm>
int main()
{
std::vector<std::pair<int, std::string>> v;
v.emplace(v.begin(), 3, std::string("hello"));
v.insert(v.begin(), std::make_pair(1, std::string("world")));
std::for_each(v.begin(), v.end(), [](decltype(v)::const_reference x) {
std::cout << x.first << ',' << x.second << std::endl;
});
}
出力
1,world
3,hello
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2013 ✅