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 不支援相應的引數,則會導致“未定義行為”。

另見