public member function
<deque>

std::deque::emplace

template <class... Args>  iterator emplace (const_iterator position, Args&&... args);
Construct and insert element
透過在position處插入一個新元素來擴充套件容器。此新元素使用args作為其建構函式的引數就地構造。

這會將容器的 size 有效地增加一。

雙端佇列被設計為在序列的開頭或結尾高效地執行插入(和刪除)操作。在其他位置的插入通常不如 listforward_list 容器高效。有關直接在開頭或結尾擴充套件容器的成員函式,請參閱 emplace_frontemplace_back

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

引數

position
新元素插入到容器中的位置。
成員型別const_iterator是一種指向常量元素的 隨機訪問迭代器 型別。
args
轉發給構造新元素的引數。

返回值

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

成員型別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
// deque::emplace
#include <iostream>
#include <deque>

int main ()
{
  std::deque<int> mydeque = {10,20,30};

  auto it = mydeque.emplace ( mydeque.begin()+1, 100 );
  mydeque.emplace ( it, 200 );
  mydeque.emplace ( mydeque.end(), 300 );

  std::cout << "mydeque contains:";
  for (auto& x: mydeque)
    std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}
輸出
mydeque contains: 10 200 100 20 30 300


複雜度

根據具體的庫實現,可能與 positiondeque 的某個末尾之間的元素數量呈線性關係。

迭代器有效性

如果插入發生在序列的開頭或結尾,所有與此容器相關的迭代器都會失效,但指標和引用保持有效,指向呼叫前它們所指向的相同元素。
如果插入發生在 deque 的任何其他位置,所有與此容器相關的迭代器、指標和引用都會失效。

資料競爭

容器被修改。
如果插入發生在序列的開頭或結尾,則不會訪問任何包含的元素(但請參閱上面的“迭代器有效性”)。
如果發生在其他任何地方,則併發訪問元素不安全。

異常安全

如果 positionbeginend,則在發生異常時容器不會改變(強保證)。
否則,容器保證以有效狀態結束(基本保證)。
如果不支援具有適當引數的 allocator_traits::construct,或者 position 無效,則會導致未定義行為

另見