譬如删除str中的字符a
str.erase( std::remove( str.begin(), str.end(), 'a' ), str.end() );
remove 的作用就是删除从 str.begin到str.end()中的字符'a',并且返回一个迭代器。删除是使用前向删除的方式删除的,如下:
template< class ForwardIt, class T >
ForwardIt remove(ForwardIt first, ForwardIt last, const T& value)
{
first = std::find(first, last, value);
if (first != last)
for(ForwardIt i = first; ++i != last; )
if (!(*i == value))
*first++ = std::move(*i);
return first;
}
看懂上面实现之后,如下图,在整个区间删除完字符'a' 的形成的新区间(红色)的下一个位置其实就是迭代器的位置 ,而黑色部分的元素已经被拷贝到前面去了
image.png
所以最后只需要erase释放掉这部分就好了。
网友评论