# std::vector<T,Allocator>::push_back

< cpp‎ | container‎ | vector

| (1) |
void push_back( const T& value ); |  | (C++20 前)
constexpr void push_back( const T& value ); |  | (C++20 起)
| (2) |
void push_back( T&& value ); |  | (C++11 起) (C++20 前)
constexpr void push_back( T&& value ); |  | (C++20 起)

后附给定元素 `value` 到容器尾。

1) 初始化新元素为 `value` 的副本。
2) 移动 `value` 进新元素。

若新的 size() 大于 capacity() ，则所有迭代器和引用（包含尾后迭代器）都被非法化。否则仅尾后迭代器被非法化。

### 参数

value | - | 要后附的元素值
类型要求
- 为使用重载 (1) ， `T` 必须满足可复制插入 (CopyInsertable) 的要求。
- 为使用重载 (2) ， `T` 必须满足可移动插入 (MoveInsertable) 的要求。

### 返回值

（无）

### 复杂度

均摊常数。

### 异常

若抛出异常（可能因为 `Allocator::allocate()` 或元素复制/移动构造函数/赋值），则此函数无效果（强异常保证）。

若 `T` 的移动构造函数不是 noexcept 且 T 不可复制插入 (CopyInsertable) 到 `*this` ，则 vector 将使用会抛出的移动构造函数。若它抛出，则抛弃保证且效果未指定。 | (C++11 起)

### 注解

一些实现在 `push_back` 导致会超出 max_size 的重分配时亦抛出 std::length_error ，由于这会隐式调用 reserve(size()+1) 的等价者。

### 示例

    #include <vector>
    #include <iostream>
    #include <iomanip>

    int main()
    {
        std::vector<std::string> letters;

        letters.push_back("abc");
        std::string s = "def";
        letters.push_back(std::move(s));

        std::cout << "vector holds: ";
        for (auto&& i : letters) std::cout << std::quoted(i) << ' ';
        std::cout << "\nMoved-from string holds " << std::quoted(s) << '\n';
    }

输出：

    vector holds: "abc" "def"
    Moved-from string holds ""

### 参阅

emplace_back (C++11) | 在容器末尾就地构造元素 (公开成员函数)
pop_back | 移除末元素 (公开成员函数)