public member function
<deque>
std::deque::emplace
template <class... Args> iterator emplace (const_iterator position, Args&&... args);
Construct and insert element
参数
- position
- 新元素插入到容器中的位置。
成员类型const_iterator是一种指向常量元素的 随机访问迭代器 类型。
- args
- 转发给构造新元素的参数。
返回值
指向新插入元素的迭代器。
成员类型iterator是一种指向元素的 随机访问迭代器 类型。
新元素的存储使用allocator_traits<allocator_type>::construct()分配,这在失败时可能会抛出异常(对于默认的 allocator,bad_alloc如果分配请求不成功,则抛出)。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
// deque::emplace
#include <iostream>
#include <deque>
int main ()
{
std::deque<int> mydeque = {10,20,30};
auto it = mydeque.emplace ( mydeque.begin()+1, 100 );
mydeque.emplace ( it, 200 );
mydeque.emplace ( mydeque.end(), 300 );
std::cout << "mydeque contains:";
for (auto& x: mydeque)
std::cout << ' ' << x;
std::cout << '\n';
return 0;
}
|
输出
mydeque contains: 10 200 100 20 30 300
|
复杂度
根据具体的库实现,可能与 position 和 deque 的某个末尾之间的元素数量呈线性关系。
迭代器有效性
如果插入发生在序列的开头或结尾,所有与此容器相关的迭代器都会失效,但指针和引用保持有效,指向调用前它们所指向的相同元素。
如果插入发生在 deque 的任何其他位置,所有与此容器相关的迭代器、指针和引用都会失效。
数据竞争
容器被修改。
如果插入发生在序列的开头或结尾,则不会访问任何包含的元素(但请参阅上面的“迭代器有效性”)。
如果发生在其他任何地方,则并发访问元素不安全。