public member function
<list>

std::list::emplace_back

template <class... Args>  void emplace_back (Args&&... args);
在list的末尾构造并插入元素
在list的末尾插入一个新元素,紧跟在当前最后一个元素之后。这个新元素将使用args作为构造参数进行原地构造。

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

该元素通过调用allocator_traits::construct并转发args来实现原地构造。

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

参数

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

返回值



新元素的存储使用容器的 allocator 分配,分配失败时可能会抛出异常(对于默认 allocatorbad_alloc如果分配请求不成功,则抛出)。

示例

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

int main ()
{
  std::list< std::pair<int,char> > mylist;

  mylist.emplace_back(10,'a');
  mylist.emplace_back(20,'b');
  mylist.emplace_back(30,'c');

  std::cout << "mylist contains:";
  for (auto& x: mylist)
    std::cout << " (" << x.first << "," << x.second << ")";

  std::cout << std::endl;
  return 0;
}

输出
mylist contains: (10,a) (20,b) (30,c)


复杂度

常量。

迭代器有效性

没有变化。

数据竞争

容器已修改。
不访问任何包含的元素:并发访问或修改它们是安全的。

异常安全

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

另见