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

< cpp‎ | container‎ | vector

| (1) |
iterator erase( iterator pos ); |  | (C++11 前)
iterator erase( const_iterator pos ); |  | (C++11 起) (C++20 前)
constexpr iterator erase( const_iterator pos ); |  | (C++20 起)
| (2) |
iterator erase( iterator first, iterator last ); |  | (C++11 前)
iterator erase( const_iterator first, const_iterator last ); |  | (C++11 起) (C++20 前)
constexpr iterator erase( const_iterator first, const_iterator last ); |  | (C++20 起)

从容器擦除指定的元素。

1) 移除位于 `pos` 的元素。
2) 移除范围 `[first; last)` 中的元素。

非法化位于擦除点或之后的迭代器，包含 end() 迭代器。

迭代器 `pos` 必须合法且可解引用。从而不能以 end() 迭代器（合法，但不可解引用）为 `pos` 的值。

若 `first==last` 则迭代器 `first` 不必可解引用：擦除空范围是无操作。

### 参数

pos | - | 指向要移除的元素的迭代器
first, last | - | 要移除的元素范围
类型要求
- `T` 必须满足可移动赋值 (MoveAssignable) 的要求。

### 返回值

后随最后移除元素的迭代器。

若 `pos` 指代末元素，则返回 end() 迭代器。

若在移除前 `last == end()` ，则返回更新的 end() 迭代器。

若 `[first, last)` 为空范围，则返回 `last` 。

### 异常

不抛出，除非 `T` 的赋值运算符抛异常。

### 复杂度

线性：调用 T 析构函数的次数与被擦除的元素数相同，调用 T 赋值运算符的次数与 vector 中被擦除元素后的元素数相等。

### 示例

    #include <vector>
    #include <iostream>

    int main( )
    {
        std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        for (auto &i : c) {
            std::cout << i << " ";
        }
        std::cout << '\n';

        c.erase(c.begin());

        for (auto &i : c) {
            std::cout << i << " ";
        }
        std::cout << '\n';

        c.erase(c.begin()+2, c.begin()+5);

        for (auto &i : c) {
            std::cout << i << " ";
        }
        std::cout << '\n';
    }

输出：

    0 1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 6 7 8 9

### 参阅

clear | 清除内容 (公开成员函数)