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,则会导致“未定义行为”。

另见