public member function
<vector>

std::vector::push_back

void push_back (const value_type& val);
void push_back (const value_type& val);void push_back (value_type&& val);
在末尾新增元素
vector 的末尾(在其當前最後一個元素之後)新增一個新元素。val 的內容被複制(或移動)到新元素。

這會使容器的 size 有效地增加一,如果新的 vector size 超過了當前的 vector capacity,則會自動重新分配已分配的儲存空間。

引數

val
要複製(或移動)到新元素的值。
成員型別value_type是容器中元素的型別,在 vector 中定義為對其第一個模板引數的別名(T).

返回值



如果發生重新分配,儲存將使用容器的allocator進行分配,這可能會在失敗時丟擲異常(對於預設allocatorbad_alloc如果分配請求不成功,則丟擲)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// vector::push_back
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  int myint;

  std::cout << "Please enter some integers (enter 0 to end):\n";

  do {
    std::cin >> myint;
    myvector.push_back (myint);
  } while (myint);

  std::cout << "myvector stores " << int(myvector.size()) << " numbers.\n";

  return 0;
}
示例程式碼中使用push_back每次讀取新整數時向 vector 新增一個新元素。

複雜度

常數(攤還時間,可能會發生重新分配)。

如果發生重新分配,重新分配本身最多與整個size呈線性關係。

迭代器有效性

如果發生重新分配,則所有與容器相關的迭代器、指標和引用都將失效。
否則,只有 end 迭代器失效,並且所有指向元素的迭代器、指標和引用都保證繼續指向它們在呼叫之前所指向的相同元素。

資料競爭

容器已被修改。
如果發生重新分配,則所有包含的元素都將被修改。
否則,不會訪問現有元素,並且同時訪問或修改它們是安全的。

異常安全

如果沒有發生重新分配,則在發生異常時容器不會發生變化(強保證)。
如果發生重新分配,當元素的型別是可複製無異常移動時,也提供強保證。
否則,容器保證最終處於有效狀態(基本保證)。
如果不支援使用 val 作為引數的 allocator_traits::construct,則會導致“未定義行為”。

另見