public member function
<forward_list>

std::forward_list::emplace_after

template <class... Args>  iterator emplace_after (const_iterator position, Args&&... args);
構造並插入元素
透過在 position 指定的元素之後插入新元素來擴充套件容器。此新元素使用 args 作為其建構函式的引數就地構造。

這會有效地將容器大小增加一。

與其他標準序列容器不同,listforward_list容器專門設計用於在任何位置(即使在序列中間)高效地插入和刪除元素。

要在 forward_list 的開頭插入元素,請使用成員函式 emplace_front,或將 before_begin 作為 position 呼叫此函式。

透過呼叫 allocator_traits::construct 並轉發 args 來就地構造元素。

存在一個類似的成員函式 insert_after,它將現有物件複製或移動到容器中。

引數

position
在新元素插入之後容器中的位置。
成員型別const_iterator是一個指向 const 元素的 forward iterator 型別。
args
轉發給構造新元素的引數。

返回值

指向新插入元素的迭代器。

成員型別iterator是一個指向元素的 forward iterator 型別。

新元素的儲存使用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
20
// forward_list::emplace_after
#include <iostream>
#include <forward_list>

int main ()
{
  std::forward_list< std::pair<int,char> > mylist;
  auto it = mylist.before_begin();

  it = mylist.emplace_after ( it, 100, 'x' );
  it = mylist.emplace_after ( it, 200, 'y' );
  it = mylist.emplace_after ( it, 300, 'z' );

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

  std::cout << '\n';
  return 0;
}
輸出
mylist contains: (100,x) (200,y) (300,z)


複雜度

常量。

迭代器有效性

沒有變化。

資料競爭

容器已修改。
未訪問容器內的任何元素:併發訪問或修改它們是安全的,儘管迭代包含 position 的範圍是不安全的。

異常安全

強保證:如果丟擲異常,容器沒有發生變化。
如果不支援具有適當引數的 allocator_traits::construct,或者 position 無效,則會導致未定義行為

另見