C++ 在find_if中使用正向和反向迭代器有什么区别
我有两个函数(一本书中的示例):C++ 在find_if中使用正向和反向迭代器有什么区别,c++,stl,C++,Stl,我有两个函数(一本书中的示例): 为什么在使用反向迭代器的函数trim\u right中我需要使用base(),而在使用正向迭代器的函数trim\u left中我不需要它?反向迭代器是常规迭代器上的适配器。和erase重载只接受常规、非反向、iterator和const\u iterator。reverse\u it.base()所做的是在reverse\u迭代器中打开适应的迭代器。因此,这是一种从reverse\u iterator或const\u iterator从const\u rever
为什么在使用反向迭代器的函数
trim\u right
中我需要使用base()
,而在使用正向迭代器的函数trim\u left
中我不需要它?反向迭代器是常规迭代器上的适配器。和erase
重载只接受常规、非反向、iterator
和const\u iterator
。reverse\u it.base()
所做的是在reverse\u迭代器
中打开适应的迭代器。因此,这是一种从reverse\u iterator
或const\u iterator
从const\u reverse\u iterator
获取迭代器的方法,因为string
serase()
具有接受迭代器的重载(从C++11开始)const\u迭代器
,不适用于反向迭代器
和常量反向迭代器
。反向迭代器是根据“底层”迭代器实现的,其base()
成员允许访问该底层迭代器(例如,从反向迭代器
获取相应的迭代器
)。
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;
}