public member function
<vector>

std::vector::erase

iterator erase (iterator position);iterator erase (iterator first, iterator last);
iterator erase (const_iterator position);iterator erase (const_iterator first, const_iterator last);
Erase elements
Removes from the vector either a single element (position) or a range of elements ([first,last)).

This effectively reduces the container size by the number of elements removed, which are destroyed.

Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to relocate all the elements after the segment erased to their new positions. This is generally an inefficient operation compared to the one performed for the same operation by other kinds of sequence containers (such as list or forward_list).

参数

position
Iterator pointing to a single element to be removed from the vector.
成员类型iteratorconst_iteratorare random access iterator types that point to elements.
first, last
Iterators specifying a range within the vector] to be removed[first,last). i.e., the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.
成员类型iteratorconst_iteratorare random access iterator types that point to elements.

返回值

An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

成员类型iterator随机访问迭代器 类型,指向元素。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// erasing from vector
#include <iostream>
#include <vector>

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

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}
输出
myvector contains: 4 5 7 8 9 10


复杂度

Linear on the number of elements erased (destructions) plus the number of elements after the last element deleted (moving).

迭代器有效性

Iterators, pointers and references pointing to position (or first) and beyond are invalidated, with all iterators, pointers and references to elements before position (or first) are guaranteed to keep referring to the same elements they were referring to before the call.

数据竞争

The container is modified.
None of the elements before position (or first) is accessed, and concurrently accessing or modifying them is safe.

异常安全

If the removed elements include the last element in the container, no exceptions are thrown (no-throw guarantee).
Otherwise, the container is guaranteed to end in a valid state (basic guarantee).
An invalid position or range causes undefined behavior.

另见