删除std::string中的特定的字符

2018-10-07  本文已影响0人  梦落迹南天

譬如删除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释放掉这部分就好了。

参考

  1. remove的实现
  2. 删除string中某个特定的字符
上一篇下一篇

猜你喜欢

热点阅读