public member function
<deque>

std::deque::emplace_back

template <class... Args>  void emplace_back (Args&&... args);
在list的末尾构造并插入元素
deque 的末尾(在其当前最后一个元素的后面)插入一个新元素。该新元素使用 args 作为其构造函数的参数,就地构造。

这会将容器的 size 有效地增加一。

元素通过调用 allocator_traits::construct 并转发 args 来就地构造。

还有一个类似的成员函数 push_back,它会复制或移动一个现有对象到容器中。

参数

args
转发给构造新元素的参数。

返回值

无。

新元素的存储使用allocator_traits<allocator_type>::construct()分配,这在失败时可能会抛出异常(对于默认的 allocatorbad_alloc如果分配请求不成功,则抛出)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// deque::emplace_from
#include <iostream>
#include <deque>

int main ()
{
  std::deque<int> mydeque = {10,20,30};

  mydeque.emplace_back (100);
  mydeque.emplace_back (200);

  std::cout << "mydeque contains:";
  for (auto& x: mydeque)
    std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}
输出
mydeque contains: 10 20 30 100 200


复杂度

常量。

迭代器有效性

所有与此容器相关的迭代器都将失效,但指针和引用保持有效,指向它们在调用前所指向的相同元素。

数据竞争

容器将被修改。
调用不会访问任何容器中的元素:并发访问或修改它们是安全的(尽管请参见上面的迭代器有效性)。

异常安全

强保证:如果抛出异常,容器没有发生变化。
如果 allocator_traits::construct 不支持相应的参数,将导致未定义行为

另见