public member function
<forward_list>

std::forward_list::emplace_front

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

这会有效地将容器大小增加一。

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

参数

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
19
// forward_list::emplace_front
#include <iostream>
#include <forward_list>

int main ()
{
  std::forward_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 不支持相应的参数,则会导致未定义行为

另见