std::string trim_right(std::string s)
{
s.erase(std::find_if(s.rbegin(), s.rend(), isalpha).base(),s.end() );
return s;
}
std::string trim_left(std::string s)
{
s.erase(s.begin(),
std::find_if(s.begin(), s.end(), isalpha));
return s;
}
为什么在具有反向迭代器的函数trim_right
中我需要使用base()
,但是在具有正向迭代器的trim_left
中我不需要它?
我有两个函数(从书中得到一个例子):std :: string trim_right(std :: string s){s.erase(std :: find_if(s.rbegin(),s.rend(),isalpha) .base(),s.end());返回s; } std :: string ...
erase
重载仅接受常规,非反向,iterator
和const_iterator
。 reverse_it.base()
的作用是在reverse_iterator
中解开适配的迭代器。因此,这是从iterator
中获取reverse_iterator
或从const_iterator
中获取const_reverse_iterator
的一种方法。