64,683
社区成员
发帖
与我相关
我的任务
分享
public member function
std::vector::erase<vector> 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, calling their destructors.
Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to move 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).
Parameters
position
Iterator pointing to a single element to be removed from the vector.
Member types iterator and const_iterator are 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.
Member types iterator and const_iterator are random access iterator types that point to elements.
Return value
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.
Member type iterator is a random access iterator type that points to elements.
Example
123456789101112131415161718192021222324 // 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;
}
Output:
myvector contains: 4 5 7 8 9 10
Complexity
Linear on the number of elements erased (destructors) plus the number of elements after the last element deleted (moving).
Iterator validity
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) guaranteed to keep referring to the same elements they were referring to before the call.
Data races
The container is modified.
None of the elements before position (or first) is accessed, and concurrently accessing or modifying them is safe.
See also
vector::pop_backDelete last element (public member function )vector::insertInsert elements (public member function )
v.resize( remove(v.begin(), v.end(), 99999) - v.begin() );
这个方法与用erase+remove是一样的。因为remove已经把需要保留的元素移到了序列前面,需要删除的元素都在尾部,所谓“erase”其实就是“resize”。