public member function
<deque>

std::deque::insert

single element (1)
iterator insert (iterator position, const value_type& val);
fill (2)
    void insert (iterator position, size_type n, const value_type& val);
range (3)
template <class InputIterator>    void insert (iterator position, InputIterator first, InputIterator last);
single element (1)
iterator insert (const_iterator position, const value_type& val);
fill (2)
iterator insert (const_iterator position, size_type n, const value_type& val);
range (3)
template <class InputIterator>iterator insert (const_iterator position, InputIterator first, InputIterator last);
move (4)
iterator insert (const_iterator position, value_type&& val);
initializer list (5)
iterator insert (const_iterator position, initializer_list<value_type> il);
插入元素
deque 容器在指定 position 的元素之前插入新元素。

這有效地將容器的 size 增加了插入元素的數量。

雙端佇列被設計為在序列的末端或beginning高效地執行插入(和刪除)。在其他位置的插入通常比在 listforward_list 容器中效率低。

引數決定了插入多少元素以及它們被初始化為哪個值。

引數

position
新元素被插入到容器中的位置。
iterator是成員型別,定義為指向元素的 隨機訪問迭代器 型別。
val
要複製(或移動)到插入元素的值。
成員型別value_type是容器中元素的型別,在 deque 中定義為其第一個模板引數(T).
n
要插入的元素數量。每個元素都將使用*val*的副本進行初始化。
成員型別size_type是一種無符號整型型別。
first, last
指定元素範圍的迭代器。範圍中元素的副本[first,last)將被插入到*position*(按相同順序)。
請注意,範圍包括 first 和 last 之間的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。
函式模板引數InputIterator應為 輸入迭代器 型別,指向的元素型別是value_type物件的型別的元素。
il
一個initializer_list物件。這些元素的副本將被插入到*position*(按相同順序)。
這些物件是從初始化列表宣告符自動構造的。
成員型別value_type是容器中元素的型別,在 deque 中定義為其第一個模板引數(T).

返回值

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

成員型別iterator隨機訪問迭代器 型別,指向元素。

)的別名。容器的 allocator 用於分配新元素所需的儲存空間,這可能會在失敗時丟擲異常(對於預設的 allocator,會丟擲bad_alloc如果分配請求不成功,則丟擲)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// inserting into a deque
#include <iostream>
#include <deque>
#include <vector>

int main ()
{
  std::deque<int> mydeque;

  // set some initial values:
  for (int i=1; i<6; i++) mydeque.push_back(i); // 1 2 3 4 5

  std::deque<int>::iterator it = mydeque.begin();
  ++it;

  it = mydeque.insert (it,10);                  // 1 10 2 3 4 5
  // "it" now points to the newly inserted 10

  mydeque.insert (it,2,20);                     // 1 20 20 10 2 3 4 5
  // "it" no longer valid!

  it = mydeque.begin()+2;

  std::vector<int> myvector (2,30);
  mydeque.insert (it,myvector.begin(),myvector.end());
                                                // 1 20 30 30 20 10 2 3 4 5

  std::cout << "mydeque contains:";
  for (it=mydeque.begin(); it!=mydeque.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
輸出
mydeque contains: 1 20 30 30 20 10 2 3 4 5


複雜度

線性複雜度與插入的元素數量(複製/移動構造)有關。此外,根據具體的庫實現,可能還會加上 dequeposition 和序列任一端之間的元素數量的線性複雜度。

迭代器有效性

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

資料競爭

容器已被修改。
如果插入發生在序列的beginning或end,則不會訪問任何包含的元素(儘管請參見上面的“迭代器有效性”)。
如果發生在其他任何地方,則併發訪問元素是不安全的。

異常安全

如果操作在 beginend 處插入單個元素,則在發生異常時容器不會發生變化(強異常安全保證)。
否則,容器保證最終處於有效狀態(基本異常安全保證)。
如果不支援具有適當引數的allocator_traits::construct進行元素構造,或者指定了無效的*position*或範圍,則會導致*未定義行為*。

另見