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

From cppreference.com
< cpp‎ | container‎ | vector

| (1) |
iterator erase( iterator pos ); |  | (until C++11)
iterator erase( const_iterator pos ); |  | (since C++11)
| (2) |
iterator erase( iterator first, iterator last ); |  | (until C++11)
iterator erase( const_iterator first, const_iterator last ); |  | (since C++11)

Erases the specified elements from the container.

1) Removes the element at `pos`.
2) Removes the elements in the range `[first, last)`.

Invalidates iterators and references at or after the point of the erase, including the end() iterator.

The iterator `pos` must be valid and dereferenceable. Thus the end() iterator (which is valid, but is not dereferencable) cannot be used as a value for `pos`.

The iterator `first` does not need to be dereferenceable if `first==last`: erasing an empty range is a no-op.

### Parameters

pos | - | iterator to the element to remove
first, last | - | range of elements to remove
Type requirements
- `T` must meet the requirements of MoveAssignable.

### Return value

Iterator following the last removed element. If the iterator `pos` refers to the last element, the end() iterator is returned.

### Exceptions

Does not throw unless an exception is thrown by the assignment operator of `T`.

### Complexity

Linear: the number of calls to the destructor of T is the same as the number of elements erased, the assignment operator of T is called the number of times equal to the number of elements in the vector after the erased elements

### Example

Run this code

    #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';

        // Erase all even numbers (C++11 and later)
        for (auto it = c.begin(); it != c.end(); ) {
            if (*it % 2 == 0) {
                it = c.erase(it);
            } else {
                ++it;
            }
        }

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

Output:

    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
    1 7 9

### See also

clear | clears the contents (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/vector/erase&oldid=50811"