public member function
<list>

std::list::emplace_front

template <class... Args>  void emplace_front (Args&&... args);
在列表开头构造并插入元素
在列表的开头、当前第一个元素之前插入一个新元素。新元素使用 args 作为构造函数的参数就地构造。

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

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

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

参数

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_front
#include <iostream>
#include <list>

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

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

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

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

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


复杂度

常量。

迭代器有效性

没有变化。
成员 begin 返回不同的迭代器值。

数据竞争

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

异常安全

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

另见