本文内容学习自 Scott Meyers的《Effective C++》“第33条:对包含指针的容器使用remove这一类算法时要特别小心”
remove搭配erase
容器(除了list)中的remove不是真正意义上的删除。因为它做不到。
remove仅仅是把想要移动的对象放到容器的后面,不需要替换的元素不断从后面移动、替换前面需要被删除的元素。
vector<int>::iterator newEnd( remove(v.begin(), v.end(), 99) );
remove和erase可以实现真正的删除。
vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.push_back( 99 );
v.push_back( 5 );
v.push_back( 99 );
v.push_back( 7 );
v.push_back( 8 );
v.push_back( 9 );
v.push_back( 99 );
vector<int>::iterator newEnd( remove( v.begin(), v.end(), 99 ) );
v.erase( newEnd, v.end() );
for( auto it: v )
{
cou